【问题标题】:Get device (joystick) guid with windows multimedia (winmm.dll)使用 windows 多媒体 (winmm.dll) 获取设备(操纵杆)guid
【发布时间】: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


【解决方案1】:

根据@Hans Passant (https://stackoverflow.com/users/17034/hans-passant) cmets 下面的问题:

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

对我有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2021-01-26
    相关资源
    最近更新 更多