2011-12-17 10 views

答えて

1

任意のプログラミング言語?私のお勧めは、CまたはC++で小さなアプリケーションを書くことです(ただし、これはP/Invokeの.NETアプリでも可能です)。

具体的には、低レベルのキーボードとマウス入力をアプリケーションに送信できるWin32 APIからSendInput functionを探しています。これは、送信する情報が含まれているINPUT structureの形でこれを行います。

もちろん、この関数の使用はUIPIの影響を受けます。つまり、入力を注入しているアプリケーションは、注入を行っているアプリケーションと同等またはそれ以下の整合性レベルで実行している必要があります。

しかし、この機能は一般的にはカバーの下で使用されるものなので、最後の小さな警告が原因で機能しない可能性があります。正確に言うのは難しいです。あなたは「働かないでください」という意味を教えてくれません。

4

(AutoHotKeysと非常によく似ています)のAutoIt!3を使用して、Send()http://www.autoitscript.com/autoit3/docs/functions/Send.htm)を使用しますが、あなたが行う前に、アクティブなゲーム画面(WinActivate())を持っていることを確認してくださいと思います。

私はSecond Life(OpenGLを使用)とのやり取りにこれを使用しました。すべてのゲームが良いキーボードバッファを実装しているわけではないので、シミュレートされたキーの押下の間にSleep()の期間が必要な場合があります。

これでうまくいかない場合は、ゲームがハードウェアドライバに直接アクセスしている可能性があります。唯一の選択肢は、キーボードドライバに接続することです。あなたがしようとしている頻度のプログラムに完全に依存押されたキーを維持するためにどのくらい考え出す

Send("{left down}") ; hold down the LEFT key 
Sleep(10)   ; keep it pressed for 10 milliseconds 
Send("{left up}") ; release the LEFT key 

:ゲームはポーリングがasynchonouslyある場合

は、あなたがdownup修飾子フラグを使用したいですコントロールがキーボードをポーリングしています。確かに知る方法はありません。

+0

AutoIt3では「{LEFT}」などのコマンドを直接送信するとほとんど動作します。ゲームでは扱われません。私はループで10回SEND( "{LEFT}")を繰り返さなければなりません。この場合でもゲームはコマンドを処理しません。 – user1026187

+4

おそらく起こっていることは、ゲームが{LEFT}信号を同期的にポーリングしていることです。すなわち、特定の瞬間にキーが押されたか否かをチェックする。 'Send'は、キーの押下をシミュレートします。 おそらく、 'Send'(http://www.autoitscript.com/autoit3/docs/appendix/SendKeys.htm)にDOWN/UP修飾子を使用したいと思うでしょう。 – Martijn

+0

今、私はプログラムでゲームをコントロールすることができます、ありがとう! :-) – user1026187

1

このキーボードwrapperは、ゲームや他のアプリケーションでC#を使用してキーボードイベントをシミュレートすることができます。

関連する問題