C# 如何与DJ控制器(USB硬件)通信

C# 如何与DJ控制器(USB硬件)通信,c#,usb,hardware,joystick,C#,Usb,Hardware,Joystick,我有一个DJ控制器,它通过USB连接到电脑。它由许多按钮、旋转刻度盘(看起来像电位计)、十字推子组成,当然还有一个用于刮花的转盘。 该控制器可用于流行的DJ节目,工作良好。 在DJ程序中,我能够将设备上的不同按钮和控件映射到DJ程序中的软件功能。映射时,按钮的名称显示在DJ程序中(名称如“FX1”-不只是映射到键盘按钮) 我想创建一个能够从USB DJ控制器获取输入的应用程序。没有奇特的音频处理或诸如此类的东西,我想做的就是能够: 获取设备上可用的按钮和控件列表 从这些控件而不是从键盘获取值 因

我有一个DJ控制器,它通过USB连接到电脑。它由许多按钮、旋转刻度盘(看起来像电位计)、十字推子组成,当然还有一个用于刮花的转盘。 该控制器可用于流行的DJ节目,工作良好。 在DJ程序中,我能够将设备上的不同按钮和控件映射到DJ程序中的软件功能。映射时,按钮的名称显示在DJ程序中(名称如“FX1”-不只是映射到键盘按钮)

我想创建一个能够从USB DJ控制器获取输入的应用程序。没有奇特的音频处理或诸如此类的东西,我想做的就是能够:

  • 获取设备上可用的按钮和控件列表
  • 从这些控件而不是从键盘获取值
  • 因为按钮、滑块等在DJ控制器中显示为命名控件,这使我相信这些信息是可以访问的,可能与操纵手柄的工作方式类似(尽管我实际上没有在.NET中使用操纵手柄)


    一般来说,尤其是在C#中,如何与这样的USB设备进行通信?

    这取决于控制器制造商向您提供了什么,以及设备如何枚举

    假设该设备是通用批量设备(需要第三方驱动程序),您可以在该设备的VID/PID上安装自己的WinUSB驱动程序。然后,您可以通过WinUSB API与设备进行接口。这里的问题是,你需要知道设备的协议——如果制造商愿意,你可以从他们那里得到这个协议。这里的另一种选择是在正常操作期间嗅探总线(使用硬件分析器,如Ellisys)

    如果设备作为HID设备枚举,则必须符合某些HID标准(例如鼠标、键盘或MIDI控制器)。在这种情况下,规范将在制造商之外已经定义并可用。在这种情况下,您可以使用hidapi打开并使用设备,与DJ应用程序的方式相同