1、如果使用visual c++ 或是MFC 程式語言來與HID Device溝通則必須先安裝WDK,因為必須包含(Include)HID 相關的標頭檔 

     (header file)。

2、安裝WDK後在工具->選項->專案和方案->Visual C++目錄中設定下列資料:

Setting Include File:(1) \inc\ddk (2) \inc\api

Setting Library File:(1) lib\wlh\i386

3、使用Visual C#則不需要先安裝WDK,因為相關的Structure和vairable 必須使用者自行宣告。

EX:      

 Structure Setting:

    [StructLayout(LayoutKind.Sequential,CharSet = CharSet.Ansi)] 

    public struct DeviceInterfaceData

   {

           public int Size;

           public Guid InterfaceClaseGuid;

           public int Flags;

           public int Reserved;

   }

   Vairable Setting :

   public const uint GENERIC_READ = 0x80000000;

   public const uint FILE_SHARE_WRITE = 0x2;

 

4、使用DLLImport來Include hid.dll 、setupapi.dll和其他的Windows API library。

EX:

 using System.Runtime.InteropServices;

     [DllImport("setupapi.dll",SetLastError = true)]

     protected static extern int SetupDiDestroyDeviceInfoList(IntPtr lpInfoSet); 

     [DllImport("hid.dll", CharSet = CharSet.Auto)]

     protected static extern bool HidD_FreePreparedData(ref IntPtr PreparedData);


5 、HID 主要分下列三種不同的Report分別使用相應的函式(function)進行溝通:

      Feature Report: HidD_GetFeature 、 HidD_SetFeature

      Output Report: WriteFile (Interrupt Transfer) 、HidD_SetOutputReport (Control Transfer)

      Intput Report:  ReadFile (Interrupt Transfer)、H idD_SetInputReport(Control Transfer)

 

6、對於滑鼠、鍵盤此類獨占性的設備只能進行查詢的動作。

7、在C#中如果要擷取視窗訊息則必須要override WndProc function來取得系統訊息。

     protected override void WndProc(ref Message m)

     {

            base.WndProc(ref m);

            if (m.Msg == WM_DEVICECHANGE&&mWParam.ToInt32() == DBT_DEVNODES_CHANGED)

            {    Program Context ………   }

     }

Download :  UseHIDSample.zip  UseHIDSample.exe

Result :

                     

                       

                    

                   



文章標籤
全站熱搜
創作者介紹
創作者 yunjuihuang 的頭像
yunjuihuang

瑞の資訊備忘錄

yunjuihuang 發表在 痞客邦 留言(16) 人氣(31,352)