C# 使用windows多媒体(winmm.dll)获取设备(操纵杆)guid
我试图实现与非托管代码和c#的互操作 我已决定为此使用winmm.dll 需要获取唯一的guid并识别设备状态(已连接或未连接) 经过一些调查,我相信找到了应该做这件事的函数(joyGetDevCapsA)。但不清楚什么值应该作为intid参数传递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";
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,请确保您的设备仍然支持它。