[問題]使用 win32 SDK/DDK 寫 USB HID 的一些問題
個人以往完全沒有 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
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章