Windows10 x64使用USB虚拟HID设备控制系统音频音量的播放/暂停

2022-04-24 1483 2

搞了一个虚拟的自定义HID通讯,这一般对程序员来说,比较好用,特别是功能开发的。内容详见:http://www.usbzh.com/article/detail-884.html

不过在HID的大类中,有一些特定的类如“符合 HID 标准的用户控制设备”,这些由系统负责打开(我们在应用层是无法打开的,如打开会报没有权限的),实现一些特定的功能,如显示器的屏幕亮度等,一键打开浏览器等多功能HID设备,不过最常用的还是我们的音频控制,如耳机上带的音量控制,播放、暂停、上一曲,下一曲等功能。

说到底,这些都是HID设备,只是符合一些通用的默认功能,由系统对其输入报告和输出报告进行维护,这有点类似如键盘的输出报告用于维护接入系统中所有的键盘的指示灯功能。

我们基于原来的自定义HID进行信息修改,实现一个音量增减和当前播放停止开始的HID设备,当然由于我们是虚拟的HID设备,故这些按钮的信息是通过应用层的按钮实现,故这里是一个虚拟的按键,不同于我们如耳机上的真实按钮,不过功能都是一样的。

下来我们实现通过虚拟HID设备来控制系统音频播放器的控制,如我们的实例为华为耳机播放音乐。

基于本站的HID报告描述符( http://www.usbzh.com/article/detail-803.html )修改驱动后,进行自定义HID设备驱动的相关参数修改,编译后,安装驱动,在设备管理器中虚拟出的HID设备如下图:
虚拟HID

在应用层定义其输入报告描的结构体:

    typedef struct AUDIO_HID
    {
        UCHAR VolumeIncrement : 1;
        UCHAR VolumeDecrement : 1;
        UCHAR Mute : 1;
        UCHAR PlayPause : 1;
        UCHAR NextTrak : 1;
        UCHAR PreTrack : 1;
        UCHAR FastForWard : 1;
        UCHAR Stop : 1;

        UCHAR TrackIngIncrement : 1;;
        UCHAR TrackingDecrement : 1;;
        UCHAR StopEject : 1;;
        UCHAR Volume : 1;;
        UCHAR BalanceRight : 1;;
        UCHAR BalacneLeft : 1;;
        UCHAR Play : 1;;
        UCHAR Pause : 1;;
    }AUDIO_HID;

按钮与播放、暂停的控制:


void CHidTestDlg::OnBnClickedButtonSendData()
{
    TCHAR DeviceName[512] = { 0 };
    if (!CUsb::USBEnumDevice(DeviceName, 0))
    {
        printf("USBEnumDevice err\n");
        return;
    }

    CUsb usb;
    if (!usb.UsbOpenDevice(DeviceName))
    {
        printf("open usb  device err\n");
        return;
    }


    CButton* pPlayPause = (CButton*)GetDlgItem(IDC_CHECK_PLAY_PAUSE);

    AUDIO_HID ah;
    memset(&ah, 0, sizeof(ah));
    ah.PlayPause = pPlayPause->GetCheck();

    for (int i = 0; i < 1; i++)
    {
        ULONG rtn = 0;
        if (!usb.SetHidInputReport(&ah, sizeof(ah), &rtn))
        {
            printf("SetHidInputReport err=0x%x\n", GetLastError());
        }
        else
        {
            printf("SetHidInputReport ok\n");
        }
    }
    usb.UsbClose();
}

点击按钮实现对歌曲的播放与暂停的功能。

  • 暂停状态
    暂停状态

  • 播放状态
    播放状态

通过BUSHOUND抓取虚拟的HID设备的数据

Device  Length    Phase  Data                
------  --------  -----  --------------------
  30           3  IN     00 08 00            
  30           3  IN     00 08 00            
  30           3  IN     00 00 00            
  30           3  IN     00 00 00            
  30           3  IN     00 00 00            
  30           3  IN     00 00 00            
  30           3  IN     00 08 00            
  30           3  IN     00 08 00            
  23.3            RESET                      
  30           3  IN     00 08 00            
  30           3  IN     00 08 00            
  30           3  IN     00 08 00            
  30           3  IN     00 08 00            
  30           3  IN     00 08 00            
  30           3  IN     00 08 00            
  23.3            RESET

30是我们虚拟HID设备,23.3是们的耳机。
BUSHOUND

说明,1607的WIN10系统不支持播放暂停的功能,但支持音量的控制。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

Windows下UVC虚拟摄像头的实现
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL_BUSEN......
Win10 x64虚拟设备之触摸屏
前一段时间在本人整理了自己编写的USB虚拟驱动框架,在其基础上实现了虚拟键盘,鼠标的功能。本节是继虚拟键盘鼠标的另一个虚拟USB设备-触摸屏触摸屏设备是HID设备的一个小类,但是随着触摸设备使用的越来越广泛,这类设备也变地越来越重要。触摸屏设备的原理和我们手机上的触摸屏原理一样,是在电脑屏幕上有一层......
HID音量控制报告描述符
音量控制HID规范提供了两种报告描述符,分别对应按钮式和旋钮式。Up/Down 按钮音量控制下面的示例定义了一对按钮,用于渐变变量,例如音量增大和音量向下按钮。输入设备必须定义为相对设备。–1将减小音量+1将增大音量。0对音量没有影响。UsagePage(Consumer)Usage(Vol......
HID设备虚拟触摸屏上报的多点数据系统不响应
前一般时间在Windows10下使用USB驱动虚拟了一个触摸屏设备,上层软件按照HID报告述符的格式下发触摸屏数据给驱动,再由驱动将数据上交给系统,实现虚拟触摸屏的功能。今天,突发奇想,上次的报告描述符仅支持的是一个点触摸效果,今天保不实现了一下多点触摸效果,所以我通过在一个支持多点触摸屏的设备......
Win10 x64下USB-UAC虚拟声卡扬声器的实现
UsbzhVSpeaker虚拟声卡下载地址: http://www.usbzh.com/article/detail-1076.html去年的时候,使用portclass驱动模型在windows下虚拟了一个虚拟扬声器和虚拟麦克风。扬声器和麦克风在内部通过拓扑结构进行数据关联,即麦克风的数据的来......
Win10 x64下USB-UAC虚拟麦克风的实现
对于虚拟的UAC设备,实现了虚拟的UAC扬声器,总是想着再一个USB虚拟的UAC麦克风。因为这样,才算完美。本着完了完美的结果,自己又忍不住给自己找了一个活-USB虚拟麦克风虚拟麦克风的大体开发和USB虚拟扬声器类似,只是一个是输入设备,另一个是输出设备而已。所以参考UAC规范,基于UAC虚拟扬声......
USB中文网虚拟麦克风驱动程序视频演示
0.整个软件的框架如图1.安装虚拟麦克风由于本人机器处于是禁用驱动签名模式,所以会弹出签名询问对话框2.打开设备管理器可以看到虚拟的麦克风USBZH Microphone3.在音频控制面板打开设备,并使用扬声器监听该设备。这样麦克风如果有声音会通过扬声器播放出来。4.打开测试程序MicApp......
USB虚拟鼠标功能演示
该功能是USB中文网的开发例程,其设计原理见:http://www.usbzh.com/article/detail-476.html使用驱动程序实现的是虚拟USB鼠标功能。鼠标的事件由应用应用层下发:当前完成的功能:鼠标指针的移动鼠标的点击事件动态创建和销毁鼠标设备支持WIN7,WIN10 ......
USB中文网虚拟UVC摄像头DEMO演示
请查看UCAM简介 https://www.usbzh.com/article/detail-1187.html其实最开始搞的就是虚拟的UVC摄像头,没想到今天才开始展示。这次展示的是自己虚拟4个1920X1080x30的NV12数据格式的摄像头,摄像头的编号自己也就随意一些,分别为UsbzhVC......
USB中文网出品-HID虚拟全局坐标鼠标
以往我们的鼠标指针移动都是相对当前的坐标进行移动,如果要移动到指定的位置,需要不停地获取当前应用层的鼠标指针进行逼近,这样实现鼠标的定位移动或者按下等动作。但是在实际的USB鼠标分类中,还存在另一种鼠标类型,叫做全局坐标鼠标类型,即通过在指定相关的XY坐标进行相应的鼠标动作,其实现原理也和触摸屏类似......
UAC耳机自带HID调节声音报告描述符
UAC耳机自速的外接按钮实现声音的控制:增加音量也减少音量。设备管理器如下:05 0C //0 GLOBAL_USAGE_PAGE(Consumer) 09 01 //2 LOCAL_USAGE( Consumer Control ) A1 01 /......
USB 虚拟显示器
虚拟显示器需求呃,有一个需求,说要搞一个显示虚拟器,用来干什么了,我也不清楚,反下干就对了。手中无任何资料,不过在网友的建议下买了一个USB转HDMI的设备,这个安装完成后,用它自带的驱动就可以在电脑上有一个显示器。当然,如果接上HDMI的显示器,会真的出现一个显示器的。虚拟显示器实现本人经过认......
Windows10x64虚拟自定义HID设备通讯演示
以前在Windows搞了很多虚拟的USB设备,像麦克风,扬声器,摄像头,键盘,鼠标等USB设备,突估有人说没有自定义HID设备啊。我一想,确实没有,要不搞一个。不过话又说回来,搞这个有什么用了?我想了想可能是为了调试,或者为了软件隔离吧。比如说有一个软件用户不想和我们的软件有任何接口,但之间又必须通......
UAC音频设备的音量、静音控制及音量百分比对比分析
UAC音频设备通常我们认为是使用了UAC规范的USB音频设备,如USB麦克风,USB扬声器,USB耳机等。使用了UAC规范的音频设备,都是需要对其音量进行控制,如静音,音调大小的调整等。这些都是通过UAC的特性单元来实再的,其支持的音量控制可根据其UAC特性描述符的bmaControls的位掩码来实......
Windows10 x64使用USB虚拟HID设备控制系统音频音量的播放/暂停
搞了一个虚拟的自定义HID通讯,这一般对程序员来说,比较好用,特别是功能开发的。内容详见:http://www.usbzh.com/article/detail-884.html不过在HID的大类中,有一些特定的类如“符合 HID 标准的用户控制设备”,这些由系统负责打开(我们在应用层是无法打开的......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!