[問題]使用 win32 SDK/DDK 寫 USB HID 的一些問題

看板Programming作者 (嗯)時間18年前 (2006/11/07 03:23), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
個人以往完全沒有 Device Programming 的經驗 功課自覺做了不少但卻沒有很多進展 所以來這邊請教一下前輩相關的問題 首先 我要寫的並不是 win32 kernel-mode driver 只是操作某些 USB Device 的 user-mode app 而已 普通的 USB Device 可以經由 SetupDiXXX + CreateFile 來取得資訊 這個我已經成功了 但是我目前還需要試著讓 winXP 接上兩支 USB HID Mouse (當然作用的範圍僅限於我個人的 application 而已) 我也查到了 windows 系統會將 Keyboard 與 Mouse 資訊做保護 (其他的 HID 就不會, 例如 Gamepad or Joystick) 所以在使用 CreateFile 來開啟 Keyboard 與 Mouse 資訊時 必須拿掉 GENERIC_READ 與 GENERIC_WRITE (否則 CreateFile 一定會失敗) 因此 CreateFile 之後其實也無法 ReadFile 或 WriteFile 我想知道的就是 如果今天是開啟了 USB HID Mouse 那我能接著用 win32 DDK 中 hidsdi.h 裡提供的 HidD_XXX / HidP_XXX 等 API 來取得滑鼠所回傳的資料嗎 ? Device Handle 我已確實由 CreateFile 取得了... 還是說因為我 CreateFile 時沒有 GENERIC READ / WRITE flag 所以這些 HidD_XXX / HidP_XXX Api 也會失效 ? 我另外查到的一個做法是 使用 Windows Message Loop 的 WM_INPUT 吃 HID Raw Input 這樣子連自行使用 SetupDiXXX API 與 CreateFile 都可以免去 也能做到分辨不同的兩隻 USB HID Mouse 唯一的問題就是 使用 windows msg loop 的前提是 該 thread 裡至少要有一個 active 的 window 而這就又和我的目的似乎有點衝突了 ... 因為我是希望可以寫出一個獨立 和視窗不相關的 dll 希望它純粹只和 device 有關係 因為到時候可能要 binding 或 export 給別的架構用 譬如說, 某些 GUI Framework, 或是繪圖引擎包裝如 Ogre, Irrlicht 等等 架出來的應用程式, 或是寫給 Virtools Dev 的 dll plugin 等等 想請教前輩們對於兩種作法的一點見解 或是指點第三條明路 <(_ _)> 感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.72.57.78
文章代碼(AID): #15JulDlH (Programming)
文章代碼(AID): #15JulDlH (Programming)