2

私はあなたにそれを説明することによって私の問題を説明しようとします. よろしくお願いします。

TL;DR: 4 から開始します。

1. C#

VS 2008 C# でアーケード マシンのゲーム ランチャー アプリケーションを作成中です。「C:\ARCADE\GAMES」ディレクトリを読み取り、リストを生成して選択できるようにします。各ゲーム フォルダ内には、実行される「autohotkey.ahk」という AutoHotKey スクリプトがあります。これは、C# アプリ層の唯一のロジックです。これは機能します。

ゲームは混合物です

  • Dosbox で実行される Dos ゲーム
  • zsneswで実行されるSnesゲーム
  • Windows ゲーム

2.オートホットキー

アーケード コントロールは、変更できないキーボード コマンドを出力します。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

最初の行はキーバインド スクリプトを実行し、2 行目は 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

このスクリプトは、キーバインドを考慮しながら Simpsons アーケード ゲームを実行します。ゲームが起動し、アーケード コントロールでプレイできます。これは機能します

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 では、dropbox の代わりに znesw を使用して同じ問題が発生します。

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を 2 回押して (プロジェクトが終了すると削除されます)、タスク マネージャーを開いて Windows XP に戻ることしかできません。すべてのボタンのリマップは引き続き機能します (たとえば、スティックを小刻みに動かすと、メモ帳に一連の文字が出力されます)、数字の 3 は数字の 3 を出力するだけです。

考えられるすべてのkillコマンドの多くのバリエーションと組み合わせを試しました(したがって、zsneswの肥大化したkill-attemps)、それらのどれも常に機能しません. それらの多くは時々機能し、6 時間の間に、機能したときと機能しなかったときの間に 1 つも類似点を描くことができませんでした。

任意の助け、代替の殺害方法などを歓迎します

4

1 に答える 1

1
3:: 
zKill:
Process, Exist, zsnesw.exe
If ErrorLevel {
    RunWait, %comspec% /c "taskkill /F /IM zsnesw.exe /T"  ,,hide
    Sleep, 300
    Goto, zKill
} Else
    ExitApp
于 2012-08-19T15:06:09.183 に答える