在C#中处理USB设备

时间:2014-04-11 20:47:57

标签: c# usb hardware device handle

我试图为KSP创建一个插件,允许在游戏中使用X52 Pro操纵杆的MFD功能。

我遇到了一个问题,我不知道如何操作操纵杆的设备。

有谁知道如何处理设备?

1 个答案:

答案 0 :(得分:0)

您可以在Window C#Winforms类上继承WinProc,因为message.LParam和message.RParam是具有类似于MFC的语义类型HWND的HID句柄。

使用System; 使用System.Collections.Generic; 使用System.Linq; 使用System.Windows.Forms; 使用System.Runtime.InteropServices; 使用Microsoft.Win32;

命名空间WindowsFormsApplicationJoyStick {     公共类程序:RichTextBox     {

    /// <summary>
    /// Function to retrieve raw input data.
    /// </summary>
    /// <param name="hRawInput">Handle to the raw input.</param>
    /// <param name="uiCommand">Command to issue when retrieving data.</param>
    /// <param name="pData">Raw input data.</param>
    /// <param name="pcbSize">Number of bytes in the array.</param>
    /// <param name="cbSizeHeader">Size of the header.</param>
    /// <returns>0 if successful if pData is null, otherwise number of bytes if pData is not null.</returns>

    [DllImport("User32.dll")]
    extern static uint GetRawInputData(IntPtr hRawInput, uint uiCommand, IntPtr pData, ref uint pcbSize, uint cbSizeHeader);


    protected override void WndProc(ref Message m)
    {
        if (m.Msg == (int)WindowMessages.RawInput)  // WindowMessages.RawInput = 0x00FF (WM_INPUT)
        {
            RAWINPUT input = new RAWINPUT();
            int outSize = 0;
            int size = Marshal.SizeOf(typeof(RAWINPUT));

            outSize = Win32API.GetRawInputData(m.LParam, RawInputCommand.Input, out input, ref size, Marshal.SizeOf(typeof(RAWINPUTHEADER)));
            if (outSize != -1)
            {
                if (input.Header.Type == RawInputType.Joystick)
                {
                          // Output X and Y coordinates of Joystick movements                  
               }
        }
        base.WndProc(ref m);
    }

}

}