我试图为KSP创建一个插件,允许在游戏中使用X52 Pro操纵杆的MFD功能。
我遇到了一个问题,我不知道如何操作操纵杆的设备。
有谁知道如何处理设备?
答案 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);
}
}
}