3

我尝试挂钩一个窗口的 wnd proc,突然出现了一个野生变量......

好的,让我再描述一下我的问题。IP/调用了一些函数来从 C# 访问 C++ WinApi。我想将一些击键从一个窗口复制到另一个窗口(也就是 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_KEYDOWNand的 SendMessage 时WM_KEYUP),我将 vkCode 设置为 WPARAM 并从该结构构建我的 LPARAM。dwExtraInfo 只是一条消息中的击键数量吗?

例如,我按住w-key大约 10 秒钟,它是否会在发送下一条消息之前存储一个间隔内的击键次数?

这个变量真的让我感到困惑......

4

2 回答 2

4

它表示开发人员在使用 时可以使用的“额外”信息,LowLevelKeyboardProc例如,指示某种或特殊类型的键盘事件(如人工生成的击键)。在 aLowLevelKeyboardProc中, thelParam是指向 a 的指针,KBDLLHOOKSTRUCT其中包含dwExtraInfo.

这是一个很好的例子: 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 回答