2013-06-23 58 views
2

我試圖掛鉤的窗口的時候,突然一個野生變量出現的WND處理...當掛鉤窗口的消息循環,什麼KBDLLHOOKSTRUCT的dwExtraInfo爲

好吧,讓我描述我的問題有點多。我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秒鐘,是否會在發送下一條消息之前在一個間隔中存儲鍵擊量?

這個變量真正讓我困惑...

+0

如果沒有詳細說明,我認爲它主要針對Windows。 – chris

+0

@chris我不知道我是否有你想告訴我的。您的意思是它僅用於Windows平臺嗎?或者您的意思是它僅用於Windows? – bash0r

+0

我的意思是這可能是Windows可能使用的信息,但你不會。 – chris

回答

3

它代表了「額外」信息與LowLevelKeyboardProc工作時,例如,以表明某種或特殊類型的鍵盤事件(如人爲開發人員可以使用生成擊鍵)。在LowLevelKeyboardProc,該lParam是一個指向KBDLLHOOKSTRUCT持有的dwExtraInfo.

這裏是它使用一個很好的例子: http://globalmousekeyhook.codeplex.com/discussions/286784

+0

非常感謝您爲添加更多的細節。 – bash0r

2

這是因爲你看到keybd_event使用完全相同的值() 。或者SendInput()使用的KEYBDINPUT結構。或者你從GetMessageExtraInfo()得到什麼。其描述如下:

額外的消息信息是與當前線程的消息隊列關聯的應用程序或驅動程序定義的值。

所以只要你不添加任何額外的信息到你keybd_event()或SendInput(生成鍵盤消息),或者驅動程序不添加任何東西(默認的鍵盤驅動程序沒有按那麼這個領域對你來說是沒有意義的。

+0

啊,非常感謝。現在更清楚了。 – bash0r