Re: [問題] 如何抓到USB傳來的訊號 (鍵盤)(更新)

作者: iamrtp (:P)   2018-04-16 22:23:43
更新一下!hook失效的問題解決了,
我改用gma.useractivitymonitor.dll下的FUNCTION搞定
現在的問題是無法分辨"Enter"與"NumPad Enter"這兩顆按鍵
已經試過以下方法:
1. bool isExtended = (bool) typeof(KeyEventArgs).InvokeMember("IsExtendedKey",
BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance,
null, e, null);
這個function無效,似乎已經沒有IsExtendedKey功能可以存取。
2. protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
無法跟Hook共存,Hook存在的話就不會進入函式
3. 用DirectX.input 下的 Device.GetPressedKeys()
在Hook產生的事件中會抓到空值
不知道大大知不知道其他解法,感激!!!
各位大大好,本來我要抓的是長得像這樣的訊號
http://www.perisoft.net/bushound/details.htm
後來找了大大回應的函示,還是沒有成功,因此改成用HOOK來抓鍵盤輸入
本來我的程式都完全達到目的,該抓該偵測的按鍵都有偵測到,
但是這支程式不知道為什麼,執行到後來反應越來越慢,
甚至最後HOOK對KEYDOWN完全沒反應了......
我一直在想是不是沒有反安裝HOOK的關係
因此反安裝了幾次,但還是無效,程式對KEYDOWN完全沒反應
不然就是有偵測到輸入,但是判定按鈕沒有按= =
程式碼是參考
https://dotblogs.com.tw/huanlin/2008/04/23/3320

https://goo.gl/W6hAQY
懇請大大教我一下,讓我了解一下是哪個步驟漏掉,才讓HOOK漸漸失敗
(我發現就算把HOOK相關程式碼註解,原本FORM的自己的KEYDOWN事件也一樣抓不到了)
是不是我應該把user32.dll這個檔案備份才能做這隻程式呢?
這隻程式偵錯時,會寫資訊到登錄檔或是永久修改user32.dll嗎?
希望大大能協助解答一下疑惑,讓小弟能突破瓶頸,感激不盡
※ 引述《iamrtp (:P)》之銘言:
: 各位大大好,小弟目前在開發一隻程式,
: 這隻程式要能透過USB抓到電路板傳來的機械碼。
: 目前嘗試使用
: SerialPort.GetPortNames();
: 但是我發現回傳的Name數為0 =_=
: 看了一下登陸檔,發現我的電腦在
: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\ 底下根本沒有"SERIALCOMM"
: 這下我迷惘了!如果這條路走不通的話,
: 還有沒有其他方式能偵測USB傳來的機械碼訊號呢?
: 找了很久還是沒找到解法,希望這邊大大開示,感激不盡!!

Links booklink

Contact Us: admin [ a t ] ucptt.com