Я попытаюсь объяснить мою проблему, проведя вас через нее. Заранее спасибо за терпение со мной.
TL; DR: начало в 4.
1. C #
Я нахожусь в процессе создания приложения запуска игровых автоматов Arcade в VS 2008 C #.
Он читает каталог 'C: \ ARCADE \ GAMES' и заполняет список, который затем можно выбрать.
В каждой папке с игрой есть скрипт AutoHotKey, который называется autohotkey.ahk и запускается. Это единственная логика на уровне приложений 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. Клавиши автоотключения
Сокращенная версия скрипта привязки клавиш выглядит следующим образом:
#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», работает в большинстве других игр, но есть альтернативы этому. Поэтому я начал экспериментировать с другим кодом. Streetfighter показывает ту же проблему, с 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 часов я не смог провести ни одной параллели между тем, когда это работало, а когда - нет.
Любая помощь, альтернативные методы уничтожения или что-либо, приветствуется