手邊若只有標準的HID Mouse , 要如何確認自己寫的HID API ReadFile函式動作正確無誤呢??? |
缺席
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
Google一下 ,
USB HID API 的函式無法直接讀取Mouse與Keyboard 的原始資料 , 原因是OS已經介入控制. 我現在能正常使用的函式為 : CreateFile 開啟裝置 , 以VID與PID filter 到想要控制的裝置 , 回報 ReportLength..etc..... 一使用ReadFile就出現問題 , GetLastError 的值 = 6 , 查詢MSDN資料顯示該Handle沒成功 ... 是否只有USBIO Deforbiddenor 的程式架構 , 才能做讀取控制呢? 一般OS控制的 USB HID Mouse 裝置 , 使用ReadFile是無法讀取資料的? [code cpp] 請在此區域輸入程式碼 ... ... m_hHidIn = GetDeviceHandle(guid,hDeviceInfo, dwIndex,TRUE); // 取得Device to PC的資訊 ... ... BYTE byBufIn[8]; //宣告讀取資料的緩衝區 ... ReadFile(m_hHidIn,byBufIn,5,&ulBytes,NULL); //讀取滑鼠4Byte資料 ( ReportID ) = 5 ... //取得5個Byte資料 D1 = byBufIn[0]; //Report ID D2 = byBufIn[1]; D3 = byBufIn[2]; D4 = byBufIn[3]; D5 = byBufIn[4]; ... ... HANDLE GetDeviceHandle(GUID guid, HANDLE hDev, DWORD dwDevice, BOOL bIn) //GetDeviceHandle 副程式 { ... ... hDevice = CreateFile(pDeviceDetail->DevicePath, GENERIC_READ, // read , Device to PC 0, //*** FILE_SHARE_WRITE|FILE_SHARE_READ, //系統獨占設備,此值設定為 0 ??? NULL, OPEN_EXISTING, 0, NULL); ... ... } [/code] 謝謝 |
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
hDevice = CreateFile(pDeviceDetail->DevicePath,
/*GENERIC_READ | */GENERIC_WRITE, // write : PC to Device FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); int ErrorCode = GetLastError(); //if GENERIC_READ : reject (error code=5 可能是這原因了! OS獨佔HID Mouse的Read Pipe , 因此只能使用GENERIC_WRITE獲取資訊 , 如果設定GENERIC_READ或者GENERIC_READ | GENERIC_WRITE值 , ErrorCode 會等於5 , (拒絕訪問) ErrorCode List: http://blog.csdn.net/psongchao/archive/2007/04/04/1551594.aspx
編輯記錄
HUNK999 重新編輯於 2009-07-27 14:16:23, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |