场景:在做播放设备的时候需要控制音量的大小,下面几种方法将满足你的要求

方法一: 改变系统音量设置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, UInt32 dwFlags, UInt32 dwExtraInfo);
[DllImport("user32.dll")]
static extern Byte MapVirtualKey(UInt32 uCode, UInt32 uMapType);
private const byte VK_VOLUME_MUTE = 0xAD;
private const byte VK_VOLUME_DOWN = 0xAE;
private const byte VK_VOLUME_UP = 0xAF;
private const UInt32 KEYEVENTF_EXTENDEDKEY = 0x0001;
private const UInt32 KEYEVENTF_KEYUP = 0x0002;
/// <summary>
/// 改变系统音量大小,增加
/// </summary>
public void VolumeUp()
{
    keybd_event(VK_VOLUME_UP, MapVirtualKey(VK_VOLUME_UP, 0), KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(VK_VOLUME_UP, MapVirtualKey(VK_VOLUME_UP, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
/// <summary>
/// 改变系统音量大小,减小
/// </summary>
public void VolumeDown()
{
    keybd_event(VK_VOLUME_DOWN, MapVirtualKey(VK_VOLUME_DOWN, 0), KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(VK_VOLUME_DOWN, MapVirtualKey(VK_VOLUME_DOWN, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
/// <summary>
/// 改变系统音量大小,静音
/// </summary>
public void Mute()
{
    keybd_event(VK_VOLUME_MUTE, MapVirtualKey(VK_VOLUME_MUTE, 0), KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(VK_VOLUME_MUTE, MapVirtualKey(VK_VOLUME_MUTE, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}

方法二: 改变程序音量,但不改变系统音量设置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[DllImport("Winmm.dll")]
private static extern int waveOutSetVolume(int hwo, System.UInt32 pdwVolume);
[DllImport("Winmm.dll")]
private static extern uint waveOutGetVolume(int hwo, out    System.UInt32 pdwVolume); 
#region
private int volumeMinScope = 0;
private int volumeMaxScope = 100;
private int volumeSize = 100;
/// <summary>
/// 音量控制,但不改变系统音量设置
/// </summary>
public int VolumeSize
{
    get { return volumeSize; }
    set { volumeSize = value; }
}
public void SetCurrentVolume()
{
    if (volumeSize < 0)
    {
        volumeSize = 0;
    }
    if (volumeSize > 100)
    {
        volumeSize = 100;
    }
    System.UInt32 Value = (System.UInt32)((double)0xffff * (double)volumeSize / (double)(volumeMaxScope - v          
              olumeMinScope));//先把trackbar的value值映射到0x0000~0xFFFF范围
    //限制value的取值范围
    if (Value < 0)
    {
        Value = 0;
    }
    if (Value > 0xffff)
    {
        Value = 0xffff;
    }
    System.UInt32 left = (System.UInt32)Value;//左声道音量
    System.UInt32 right = (System.UInt32)Value;//右
    waveOutSetVolume(0, left << 16 | right); //"<<"左移,“|”逻辑或运算
}

转载于:https://www.cnblogs.com/gc2013/p/4259981.html

C# 二种方法控制系统音量/麦克风大小相关推荐

  1. debian7更换gcc版本的二种方法分享

    debian7更换gcc版本的二种方法分享 最近在编译qt,之前用的是debian6,gcc版本是gcc-4.4,当使用debian7时,编译遇到了很多跟debian6不一样的问题,debian7的默 ...

  2. mysql远程连接数据库的二种方法_mysql 远程连接数据库的二种方法

    mysql 远程连接数据库的二种方法 一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5.116),端口"3306",用户名为"roo ...

  3. oracle 数据导入 mysql_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...

    这篇文章主要介绍了oracle导入导出数据的二种方法,利用PL/SQL Developer工具导出和利用cmd的操作命令导出的出方法,大家参考使用吧 方法一:利用PL/SQL Developer工具导 ...

  4. oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)

    这篇文章主要介绍了oracle导入导出数据的二种方法,利用PL/SQL Developer工具导出和利用cmd的操作命令导出的出方法,大家参考使用吧 方法一:利用PL/SQL Developer工具导 ...

  5. java获取当前日期和时间的二种方法分享

    有两种方法: 方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码: import java.util.*; import j ...

  6. mysql远程连接数据库的二种方法_mysql 远程连接数据库的二种方法 | 速光网络博客...

    一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5.116),端口"3306",用户名为"root",密码"123 ...

  7. asp教程连接sql server数据库教程二种方法

    asp教程连接sql server数据库教程二种方法  ,sql server ole db连接方法:,本人链接sql2012已经成功,想可以帮助大家 本教程主要是讲了asp与mssql server ...

  8. python二叉树广度遍历_黄哥Python: 二叉树的广度优先搜索的二种方法

    特别提示,转行的朋友,2019年不学习数据结构和算法,不刷Leetcode 等面试题库,是找不到程序员工作或者说找不到好的工作.黄哥:黄哥Python:提醒要转行当程序员的朋友,学习要分先后主次​zh ...

  9. Unity UGUI 之 实现 Text 文本文字过长,省略号显示(TextMeshPro 和常规 Text 二种方法)

    Unity UGUI 之 实现 Text 文本文字过长,省略号显示(TextMeshPro 和常规 Text 二种方法) 目录 Unity UGUI 之 实现 Text 文本文字过长,省略号显示(Te ...

最新文章

  1. 两周后上线,老板你在开玩笑吗?
  2. 使用迭代器遍历List的时候修改List报ConcurrentModificationException异常原因分析
  3. 初学者python用哪个版本好-python用哪个版本好
  4. STL_set集合容器+map映照容器
  5. iOS AppStore 申请加急审核
  6. (chap8 确认访问用户身份的认证) DIGES认证(摘要认证)
  7. STM32G071RB CubeMX ADC TIM DMA
  8. python37安装opencv41_Vs2019+opencv4.1.0+python3.7,包安装,vs2019opencv410python37,程序包
  9. Skynet 游戏服务器开发实战
  10. 【机器学习】传统目标检测算法之DPM
  11. 【HDU - 1078】FatMouse and Cheese (记忆化搜索dp)
  12. 《极品飞车12》官方网站公布发售日
  13. 宁德技校学计算机报名,你知道现在宁德市师范学校计算机报2012年的考试开始报名了吗,怎样报名啊...
  14. 信息学奥赛一本通(1223:An Easy Problem)
  15. Zygo保存zxg(Zemax File)文件(光学领域知道Zygo的一定要看)
  16. java children_java构建树形列表(带children属性)
  17. 华硕门店点亮系统_6大关键赋能,点亮导购服务力!
  18. windows 下 CUDA 并行编程环境搭建
  19. Hightopo 2D 入门
  20. Windows出现“未连接到互联网代理服务器出现问题,或者地址有误。问题解决办法”

热门文章

  1. ubuntu创建新用户名和密码以及查看删除用户
  2. C++ STL (四)set使用
  3. 计算机在有机合成中的应用,计算机在有机合成中的应用
  4. jquery日历插件 途牛_jquery日历插件SimpleCalendar
  5. 计算机word表格居中,word表格居中怎么弄
  6. python函数内部变量能改变外部吗_python中,如何利用函数修改外部变量,注意我的要求...
  7. php bdecode,PHP base64_encode和base64_decode 编码/解码url
  8. 如何网络推广教大家怎样通过提高用户粘性来助力排名提升?
  9. 网络推广下叮咚买菜已完成D轮融资,生鲜电商下一次融资又在何方?
  10. 优化网站设计方案提升网站用户回头率