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

好的,让我稍微描述一下我的问题。我 P/调用了一些函数来从 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_KEYDOWNWM_KEYUP 的 SendMessage )时,我将 vkCode 设置为 WPARAM 并从此结构构建我的 LPARAM。 dwExtraInfo 只是一条消息中的击键次数吗?

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

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

最佳答案

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

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

关于c# - hook Window 的消息循环时,KBDLLHOOKSTRUCT 的 dwExtraInfo 是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17256539/

10-10 21:29