我正在使用原始輸入API來監聽按鍵和鼠標點擊。到目前爲止,我有鍵盤按下工作,我可以得到事件觸發這樣,並閱讀哪個鍵被按下。但是,我無法使鼠標事件以相同的方式工作。獲取鼠標的設備ID /處理與原始輸入
當消息通過 WndProc(ref Message)
進入時,有一個設備句柄從未匹配設備ID(鍵盤,鼠標和HID)列表中的任何內容。而且,原始輸入緩衝區是空的,所有字段都爲零。
有沒有人對如何/爲什麼會發生這種情況建議?
請注意,我一直試圖使用: private static extern uint GetRawInputDeviceInfo(IntPtr hDevice, uint command, ref DeviceInfo data, ref uint dataSize);
來獲取有關點擊事件的源設備的任何數據,但數據也是空的/零。
感謝
編輯:
在啓動時,我得到原始輸入見過的所有設備的列表:
var pRawInputDeviceList = Marshal.AllocHGlobal((int)(dwSize * deviceCount));
GetRawInputDeviceList(pRawInputDeviceList, ref deviceCount, (uint)dwSize);
一旦我有設備的這個名單我遍歷它們並將它們添加到單獨的dictionary<deviceID, eventType>
。
後來,當我通過WndProc(ref Message)
收到消息時,我抓住message.LParam
下的標識符,但這與我原始列表中的任何設備標識都不匹配。
想必你打電話是'GetRawInputData'或'GetRawInputBuffer'。如果您使用的是第一個,那麼RAWINPUT結構會被封送,如果您使用第二個結構,則很可能存在問題,您可能無法正確分配內存。當你說'有一個設備句柄從來不匹配設備ID列表中的任何內容時,你還會做什麼比較? – theB
@theB我加了一個編輯,我希望在解答你的問題時更好一點。我使用的是GetRawInputData(),我可以查看元帥位,看看是否有任何東西出現 –