0

我尝试实现与非托管代码和 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#思想互联网的信息,所以如果有人有经验,请分享。

Q:如何检测当前是否有摇杆并获取设备唯一的Guid?

4

1 回答 1

0

根据@Hans Passant ( https://stackoverflow.com/users/17034/hans-passant ) 评论以下问题:

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

这个对我有用

于 2019-11-17T05:10:06.203 回答