我將嘗試通過引導您完成解釋我的問題。預先感謝與我同在。殺死進程的替代方法(Autohotkey或.BAT或備用解決方案)
TL; DR:開始於4
1. C#
我在創造VS 2008 C#的街機遊戲啓動應用程序的過程。 它讀取'C:\ ARCADE \ GAMES'目錄並填充一個列表,然後可以選擇該列表。 在每個遊戲文件夾中都有一個名爲'autohotkey.ahk'的AutoHotKey腳本正在運行。這是C#應用程序層中唯一的邏輯。 這工作。
的遊戲的混合物
- DOS遊戲在DOSBox中運行
- SNES遊戲在zsnesw
- Windows遊戲
2.運行AutoHotkey的
街機控制輸出鍵盤命令,不能更改。我使用autohotkey腳本重新綁定每個遊戲的密鑰。
的「autohotkey.ahk」腳本是這樣的:
Run C:\BARCADE\GAMES\SIMPSONS\autohotkeybindings.ahk
RunWait, DOSBox.exe -conf "C:\BARCADE\GAMES\SIMPSONS\dosbox.conf" -exit -noconsole -fullscreen, C:\BARCADE\DOSBOX\
DetectHiddenWindows On
SetTitleMatchMode 2
WinClose autohotkeybindings.ahk - AutoHotkey
Exit
第一行運行腳本鍵綁定,第二行運行DOSBox中,並等待其退出/被殺害,其他線路卸載鍵綁定腳本。 這工作。
3 DOSBOX
的 'dosbox.conf' 腳本是這樣的:
[sdl]
fullscreen=true
[render]
aspect=true
[cpu]
cycles=12000
[autoexec]
mount c C:\BARCADE\GAMES\
c:
cd SIMPSONS
cd PRG
SIMPSONS.EXE
運行此腳本辛普森街機遊戲,考慮到鍵綁定一段時間。遊戲啓動後,可以與街機控件一起玩。 這工作
4. AutoHotkey的鍵綁定
鍵綁定腳本的簡化版本是這樣的:
#MaxHotkeysPerInterval 1000
;p2
Numpad8::w
Numpad2::x
Numpad4::a
Numpad6::d
;FUNCTION BUTTONS
SetTitleMatchMode 2
3::Process, Close, Dosbox
的所有按鈕都正確重新映射,除了殺按鈕(輸出數字'3')。我開始測試它是否是一個機械問題,但事實並非如此。我試圖將代碼附加到任何其他按鈕,沒有工作。我使用的kill命令「Process,Close,Dosbox」適用於大多數其他遊戲,但也有替代方案。所以我開始嘗試不同的代碼。街頭霸王表現出了同樣的問題,與znesw代替的Dropbox:
kill.bat的3::
Run, kill.bat, C:\BARCADE\GAMES\STREETFIGHTER2
Process, Close, zsnesw
Process, Close, zsnesw.exe
WinKill, zsnesw
WinKill, zsnesw.exe
Run, tskill.exe zsnesw
return
內容:
%comspec% /c "taskkill /F /IM zsnesw /T"
%comspec% /c "taskkill /F /IM zsnesw /T"
%comspec% /c "taskkill /F /IM zsnesw.exe /T"
/c "taskkill /F /IM zsnesw /T"
/c "taskkill /F /IM zsnesw /T"
/c "taskkill /F /IM zsnesw.exe /T"
這工作的時間約爲30%。 其他70%的時間,遊戲不退出。所有其他重新映射的控制工作,所以它是可玩的,但沒有辦法回到菜單,並選擇一個不同的遊戲。這個功能打破了機器的全部用途,它將在公共場合使用,並且會獲得越來越多的遊戲。
當退出按鈕不起作用時,我所能做的只是在連接的鍵盤上按下ctrl + alt + del 兩次(當項目結束時它將被移除)來打開任務管理器並返回到Windows XP。所有按鈕重新映射仍然有效(例如擺動棍棒會在記事本中輸出一串字母),但數字3只輸出數字3.因此,由於某些莫名其妙的原因,鍵盤鍵似乎被忽略。
我已經嘗試了許多變化和組合,我可以想到的所有殺戮命令(因此臃腫的殺戮試圖zsnesw),並沒有一個工作總是。他們中的許多人有時會工作,並且在6個小時的時間內,我無法在工作時間和時間間隔之間劃出一個平行線。
任何幫助,替代殺方法或什麼的,認識
檢查taskkill是否成功返回智能ERROLEVEL(= 0)。如果ERRORLEVEL> 0將消息打印到日誌文件。也許taskkill命令找不到該進程。 %comspec%包含什麼? – Lucian