看板 C_and_CPP 關於我們 聯絡資訊
小弟使用vc++ 在windows 10 64bit平台上 寫一個可以接受usb鍵盤按下與彈起event的程式 由於我的usb鍵盤是特殊製造的3*5鍵盤 所以使用的HID Usage ID全部都是保留未使用的(0xE8到0xFFFF) 例如 此特殊鍵盤的第一個鍵 HID Usage ID是0xE8 第二個鍵是0xE9 其餘依此類推 問題是 我發現使用raw input的api 只能接收到正常的鍵盤訊號(例如a鍵 0x04) 保留未使用的HID Usage ID一律接收不到. 接下來我嘗試使用hidapi (http://www.signal11.us/oss/hidapi/) 這個更慘 雖然可以辨識鍵盤 但是接收不到鍵盤output的任何訊號 主要程式碼是 handle = hid_open(0x056E, 0x0811, NULL); //前一個是VID,後一個是PID res = hid_read(handle, buf, sizeof(buf)); //blocking-mode 然後就block在hid_read了,我也試過hid_set_nonblocking(handle, 1); 但也收不到訊號.. 後來我改用mac os x 10.10 完全同樣的程式碼 竟然可以接收到鍵盤的訊號! 不知道各位有何種解法可以讓我的windows 10收到usb keyboard訊號 謝謝各位! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.217.112 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1446795832.A.858.html
stupid0319: 你的USB鍵盤是arduino做的嗎? 11/06 15:57
stupid0319: 也許內建的HID驅動,考量到系統穩定度,把有的KEYCODE 11/06 16:13
stupid0319: 過濾掉了 11/06 16:14
stupid0319: 也許要寫個驅動,掛在內建的驅動前面 11/06 16:16
這是廠商給我的鍵盤 應該不是arduino 他接上去的時候 不需要特別的驅動程式 windows偵測到就是一般鍵盤 hid keyboard device 結果我發現 hidapi在mac os x上竟然可以偵測到鍵盤的動作 即使是保留未使用的HID Usage ID也可以偵測到! 看來是windows的問題? 這要怎麼解決呢? ※ 編輯: sbshank (220.136.217.112), 11/06/2015 16:45:03 ※ 編輯: sbshank (220.136.217.112), 11/06/2015 16:46:04
stupid0319: 把HID Keyboard Device改成HID-compliant device 11/06 17:56
stupid0319: http://tinyurl.com/nrytesv,遶過KBDHID.sys那條路 11/06 17:59
stupid0319: http://tinyurl.com/nrytesv 11/06 17:59
可是我還是希望它仍是一台keyboard (我這台鍵盤可以隨時更換任一鍵的HID Usage ID ) 不知道有沒有辦法在HID Keyboard Device仍可以攔截其訊號? 我用usblyzer之類的usb分析工具 可以成功攔截他傳進來的訊號耶 例如這是當我把HID Usage ID設為0x04(也就是鍵盤A)的訊號 http://i.stack.imgur.com/fCGoE.png
這個則是保留未使用ID 0xE8的訊號 http://i.stack.imgur.com/olw9D.png
※ 編輯: sbshank (140.112.71.183), 11/06/2015 20:25:24 ※ 編輯: sbshank (140.112.71.183), 11/06/2015 20:25:55
stupid0319: 你下載IRPTrace看看,看看是不是被過濾掉了? 11/06 21:08