1

私はすでに20の質問を見てきました(ここでは@ stackOverflow)しかし、何らかの理由で、彼らがアプローチする答えのほとんどが得られません。他の人は理解していると言いますが、私の場合、動作するコードは見当たりません。

マクロのようにゲーム (フォアグラウンド ウィンドウ) にキーを送信しようとしましたが、lParamが次のようになっていることを確認しました実際に違いがあります。Webの人々によると(彼らは言うが、コード/例は示していない). win 関数を初めて使用するので、いくつかのゲームでそれを機能させる方法がわかりません。「League of Legends」または「Team Fortress 2」としましょう。

メッセージを解釈する方法として送信される追加のパラメーターだと思います。しかし、ほとんどのゲームで動作させるにはどうすればよいですか? ゲームごとに動作が異なりますか?

前もって感謝します。勝利関数を使用した初心者イズムで申し訳ありません。

心から、

アルマンド・レオン

4

4 に答える 4

1

あなたの最善の策は、WM_KEYDOWN のドキュメントです

于 2011-06-27T19:02:47.647 に答える
1

で入力を偽造することはできませんPostMessage()。代わりに を使用する必要がありますSendInput()

于 2011-06-27T19:36:11.547 に答える
1

キー ダウンについては、次のリンクで lParam の内容を確認できます: http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx。単純に wParam を渡し、lParam に 0 を渡すと、仮想キー コード (wParam に含まれる) のみを使用するゲームでは機能する可能性がありますが、スキャン コード (lParam で渡される) などを使用するゲームでは機能しません。

できることは、キー ダウン (およびゲームに送信したいその他のイベント (wm_char、wm_keyup など)) の wParam と lParam を出力するユーティリティ プログラムを作成することです。次に、それを使用して、必要なキーの組み合わせの wParam と lParam を取得し、それを任意のゲームに渡すと機能します。すべての正しい値を渡すことは、すべての場合に機能することを確認する唯一の方法です。

于 2011-06-27T19:06:02.007 に答える
0

古いスレッドであることは知っていますが、誰かに「PostMessage() で入力を偽造することはできません」と言わせることはできません。このスレッドは、Google で「lparam postmessage を変更する方法」で検索すると表示されます。

Enter キーを別のプログラムに送信する必要があるとします。Spy++ を使用し、キーを物理的に押して、必要な定数と必要な lParam 値を確認します。(constandについては、こちらでも確認できます http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx
キーアップではなく、キーダウンを確認してください。

したがって、cRepeat: 1 Scancode : 29 fExtended : 0 AltDown : 0 fRepeat : 0 fUp: 0 の Enter キーが必要な場合は、

lParam の 32 ビットを変更する必要があります。ここで配列を理解する必要がありますhttp://msdn.microsoft.com/en-us/library/ms646280%28v=vs.85%29.aspx

ビットは次のようになります: 31....3 2 1 0

cRepeat には 1 が必要なので : 0000 0000 0000 0001 (配列のようにビット 0 から 15)

スキャンコードには 29 (16 進数) が必要なので : 0010 1001 (ビット 16 から 23)

残りはゼロ

今、必要なlparamを(バイナリで)再グループ化するだけです:0010 1001 0000 0000 0000 0001

そして、それを16進数に変換します:290001

したがって、私のプログラムでは、次を使用すると機能します。 PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0x290001);

私のようにここに来る人々の助けになることを願っています:)

セブ、

于 2014-07-21T18:40:04.697 に答える