3

ウィンドウの wnd proc をフックしようとしたところ、突然ワイルド変数が表示されました...

わかりました、私の問題をもう少し説明しましょう。C# から C++ WinApi にアクセスするために IP/いくつかの関数を呼び出しました。あるウィンドウから別のウィンドウにいくつかのキーストロークをコピーしたかった (別名、WoW やその他の MMO のデュアル ボクシング) P/Invoking は問題なく動作し、満足していますが、変数dwExtraInfoが何のためにあるのか混乱しています。このフィールドのドキュメントは、名前自体がすでに言っていることを繰り返しているだけです...

定義は次のとおりです。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644967(v=vs.85).aspx

または怠惰な人のために(私もその一人です:P):

[StructLayout(LayoutKind.Sequential)]
public class KBDLLHOOKSTRUCT
{
    public uint vkCode;
    public uint scanCode;
    public KBDLLHOOKSTRUCTFlags flags;
    public uint time;
    public UIntPtr dwExtraInfo;
}

このデータをゲームに送信する場合 (WPARAM をWM_KEYDOWNおよびに設定した SendMessage WM_KEYUP)、vkCode を WPARAM に設定し、この構造から LPARAM を構築します。dwExtraInfo は 1 つのメッセージのキーストロークの量だけですか?

たとえば、 をw-key10 秒ほど押したままにすると、次のメッセージが送信されるまでに 1 回の間隔でキーストロークの量が保存されますか?

この変数は本当に私を混乱させます...

4

2 に答える 2

4

これは、開発者が を操作するときに使用できる「追加の」情報をLowLevelKeyboardProc表します。たとえば、特定のタイプまたは特殊なタイプのキーボード イベント (人為的に生成されたキーストロークなど) を示すために使用できます。では、LowLevelKeyboardProcは、を保持するlParamへのポインタです。KBDLLHOOKSTRUCTdwExtraInfo.

これが使用されている良い例です: http://globalmousekeyhook.codeplex.com/discussions/286784

于 2013-06-23T00:48:35.920 に答える
2

これは、keybd_event() で使用されているのとまったく同じ値です。または、SendInput() で使用される KEYBDINPUT 構造体。または、GetMessageExtraInfo() から得られるもの。それを説明するもの:

追加のメッセージ情報は、現在のスレッドのメッセージ キューに関連付けられている、アプリケーションまたはドライバーで定義された値です。

したがって、keybd_event() または SendInput() で生成するキーボード メッセージに余分な情報を追加しない限り、またはドライバーが何も追加しない (デフォルトのキーボード ドライバーは追加しない) 限り、このフィールドはあなたには興味がありません。

于 2013-06-23T00:48:43.910 に答える