C# 使用windows多媒体(winmm.dll)获取设备(操纵杆)guid

C# 使用windows多媒体(winmm.dll)获取设备(操纵杆)guid,c#,unmanaged,multimedia,winmm,C#,Unmanaged,Multimedia,Winmm,我试图实现与非托管代码和c#的互操作 我已决定为此使用winmm.dll 需要获取唯一的guid并识别设备状态(已连接或未连接) 经过一些调查,我相信找到了应该做这件事的函数(joyGetDevCapsA)。但不清楚什么值应该作为intid参数传递 public static class InputControllerInteroperator { private const string WINMM_NATIVE_LIBRARY = "winmm.dll";

我试图实现与非托管代码和c#的互操作

我已决定为此使用winmm.dll

需要获取唯一的guid并识别设备状态(已连接或未连接)

经过一些调查,我相信找到了应该做这件事的函数(joyGetDevCapsA)。但不清楚什么值应该作为intid参数传递

public static class InputControllerInteroperator
    {
        private const string WINMM_NATIVE_LIBRARY = "winmm.dll";
        private const CallingConvention CALLING_CONVENTION = CallingConvention.StdCall;

        [DllImport(WINMM_NATIVE_LIBRARY, CallingConvention = CALLING_CONVENTION), SuppressUnmanagedCodeSecurity]
        public static extern int joyGetPosEx(int uJoyID, ref JOYINFOEX pji);

        [DllImport(WINMM_NATIVE_LIBRARY, CallingConvention = CALLING_CONVENTION), SuppressUnmanagedCodeSecurity]
        public static extern int joyGetPos(int uJoyID, ref JOYINFO pji);

        [DllImport(WINMM_NATIVE_LIBRARY, CallingConvention = CALLING_CONVENTION), SuppressUnmanagedCodeSecurity]
        public static extern int joyGetNumDevs();

        [DllImport(WINMM_NATIVE_LIBRARY, CallingConvention = CALLING_CONVENTION, EntryPoint = "joyGetDevCaps"), SuppressUnmanagedCodeSecurity]
        public static extern int joyGetDevCapsA(int id, ref JOYCAPS lpCaps, int uSize);
    }
关于C#Think internet的WinMMAPI没有太多信息,所以如果有人有经验,请分享


Q:如何在当前时刻检测到已连接或未连接操纵杆并获取设备唯一Guid?

根据Hans Passant()的评论,问题如下:


没有guid,没有连接状态。特定操纵杆由一个简单的uint标识。0是第一个操纵杆,1是第二个操纵杆,以此类推


它适用于我

没有guid,没有连接状态。特定操纵杆由一个简单的uint标识。0是第一个操纵杆,1是第二个操纵杆,依此类推,直到joyGetNumDevs。这个api非常古老,可以追溯到Win3,请确保您的设备仍然支持它。