2011-06-27 16 views
1

私は既に20の質問を見ましたが(ここでは@ stackOverflow)何らかの理由で私は彼らがアプローチする答えのほとんどを得られません。他の人は理解していると言いますが、私の場合は作業コードは見当たりません。 PostMessageのlParam(下位/上位キー)の有効な値は何ですか? (Win関数)

が、私はちょっとマクロのようなゲームに(最前面ウィンドウ)キーを送信しようとしてきた、と私は見てきたどのように lParamにのPostMessage(ハンドル、WM_KEYDOWN、(UINT)キー、0) ;は実際に違いを生みます。ウェブの人によると(彼らは言うが、コード/例は表示しない)初めて勝利関数を使用するので、私はいくつかのゲームでそれを動作させる方法についてちょっと迷っています。 「Legend of Legends」、または「Team Fortress 2」としましょう。

メッセージを解釈する方法として送信される追加のパラメータです。しかし、どのようにゲームのほとんどで動作させるのですか?すべてのゲームは違った働きをしていますか?

おかげさまでありがとうございました。私のnoobie-ismにwinの機能を残して申し訳ありません。

敬具、

アルマンド・レオン

+1

がこれをお読みくださいを行ったようにここに来る人々を助けるいただければ幸いです。http://blogs.msdn.com/b/oldnewthing/archive /2005/05/30/423202.aspx –

+1

PostMessageは機能しません。キーボードの状態(Shift、Alt、Ctrlキー)を制御することはできません。代わりにSendInput()を使用してください。 –

答えて

1

あなたの最善の策はdocumentation for WM_KEYDOWNです。

+0

ドキュメンテーション(+1)ありがとうございますが、lParamとして0を使用しましたが、チャットボックスに送信してもゲームでは動作しません。理由は何でしょうか? lParamの問題でしょうか?外部アプリからの対話をブロックするOゲーム? – Armando

1

キーダウンの場合、lParamの内容はhttp://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspxです。 lParamにwParamと0を渡すだけであれば、仮想キーコード(wParamに含まれています)を使用するゲームでは機能しますが、スキャンコード(lParamで渡されます)などを使用するゲームでは機能しません。

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

1

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

0

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

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

私はcRepeatでキーを入力が必要な場合:1スキャンコード:29 fExtended:0 AltDown:0 fRepeat:0 FUP:0、

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

ビットはそうです:31 ....0010 1001(ビット16:そうスキャンコードのために0000 0000 0000 0001(配列のようにビット0〜15)

Iが(ヘキサで)29が必要です。私はcRepeatための1を必要とする3 2 1 0

23)

残りは今、私はちょうどバイナリでLPARAMを(再編成ゼロ

である)私が必要とする:0010 1001 0000 0000 0000 0001

そして私は、16進数に変換します。290001

だから今私のプログラムでは、私が使用すると動作する予定です: PostMessage(hWnd、WM_KEYDOWN、VK_RETURN、0x290001);

は、私はそれが私が:)

セブ、続行する前に

関連する問題