挂钩Window的消息循环时,KBDLLHOOKSTRUCT的dwExtraInfo是什么

时间:2013-06-23 00:06:50

标签: c# c++ winapi hook

当我突然出现一个狂野的变量时,我试着挂了一个窗口的wnd proc ......

好的,让我更多地描述一下我的问题。我P /调用了一些函数来从C#访问C ++ WinApi。我想将一些按键从一个窗口复制到另一个窗口(在WoW和其他MMO中也称为双重拳击)P / Invoking工作得很好而且我很高兴,但我很困惑变量{{1}是为了。关于这个领域的文档只重复了名称本身已经说明的内容......

以下是定义:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644967(v=vs.85).aspx

或者对于懒惰的人(我也是其中之一:P):

dwExtraInfo

当我想将这些数据发送到游戏(将WPARAM设置为[StructLayout(LayoutKind.Sequential)] public class KBDLLHOOKSTRUCT { public uint vkCode; public uint scanCode; public KBDLLHOOKSTRUCTFlags flags; public uint time; public UIntPtr dwExtraInfo; } WM_KEYDOWN的SendMessage)时,我将vkCode设置为WPARAM并从此结构构建我的LPARAM。 dwExtraInfo只是一条消息中的击键量吗?

例如,我按下WM_KEYUP大约10秒钟,是否会在下一条消息发送之前在一个intervall中存储击键次数?

这个变量让我很困惑......

2 个答案:

答案 0 :(得分:4)

它表示开发人员在使用LowLevelKeyboardProc时可以使用的“额外”信息,例如,表示某种或特殊类型的键盘事件(如人工生成的击键)。在LowLevelKeyboardProc中,lParam是指向KBDLLHOOKSTRUCT的{​​{1}}的指针

以下是使用它的一个很好的例子: http://globalmousekeyhook.codeplex.com/discussions/286784

答案 1 :(得分:2)

它与您在keybd_event()中使用的值完全相同。或者SendInput()使用的KEYBDINPUT结构。或者你从GetMessageExtraInfo()得到什么。其中描述了它:

  

额外消息信息是与当前线程的消息队列关联的应用程序或驱动程序定义的值。

只要不向使用keybd_event()或SendInput()生成的键盘消息添加任何额外信息,或者驱动程序不添加任何内容(默认键盘)司机没有),那么你不感兴趣这个领域。