我将试着通过引导你来解释我的问题。提前感谢我的支持。
TL; DR:从4开始。
的 1。 C# 的
我正在VS 2008 C#中创建Arcade机器游戏启动器应用程序。 它读取'C:\ ARCADE \ GAMES'目录并填充一个列表,然后可以选择该列表。 在每个游戏文件夹中都有一个名为“autohotkey.ahk”的AutoHotKey脚本,该脚本正在运行。这是C#app层中唯一的逻辑。 这有效。
游戏是
的混合体的 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
所有按钮都正确重新映射,除了Kill按钮(输出数字'3')。我开始测试它是否是一个机械问题,但事实并非如此。我尝试将代码附加到任何其他按钮,不起作用。我使用的kill命令“Process,Close,Dosbox”适用于大多数其他游戏,但也有其他选择。所以我开始尝试不同的代码。街头霸王展示了同样的问题,使用znesw而不是dropbox:
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
kill.bat的内容:
%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个小时的过程中,我甚至无法在它工作之间和不工作之间绘制一个平行线。
感谢任何帮助,替代杀戮方法或其他任何方法
答案 0 :(得分:2)
您可以尝试使用SysInternals(现在由Microsoft拥有)PsKill,以查看在终止您的流程时是否更成功。
答案 1 :(得分:1)
尝试在循环中重新检查'taskkill'。
3::
kill:
GAMEPID =
Process, Exist, zsnesw.exe
GAMEPID = %ErrorLevel%
If GAMEPID
RunWait, %comspec% /c "taskkill /F /IM zsnesw.exe /T" ,,hide
Process, Exist, zsnesw.exe
GAMEPID = %ErrorLevel%
If GAMEPID
Goto, kill
Else
ExitApp