【发布时间】:2020-02-27 11:46:15
【问题描述】:
我尝试实现与非托管代码和 c# 的互操作。
我决定为此使用 winmm.dll。
需要获取操纵杆唯一的 guid 并识别设备状态(连接或未连接)
经过一番调查,我相信应该做的功能已经确定(joyGetDevCapsA)。但是不清楚应该作为 int id 参数传递什么值
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);
}
关于winmm API for C#思想互联网的资料不多,有经验的请分享一下。
问:如何检测当前时刻是否有摇杆并获取设备唯一的Guid?
【问题讨论】:
-
没有guid,没有连接状态。特定的操纵杆用一个简单的 uint 标识。 0 是第一个操纵杆,1 是第二个,依此类推。直到 joyGetNumDevs。这个api很老了,回到Win3,确保你的设备仍然支持它。
标签: c# unmanaged multimedia winmm