C# 二种方法控制系统音量/麦克风大小
场景:在做播放设备的时候需要控制音量的大小,下面几种方法将满足你的要求
方法一: 改变系统音量设置
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); //"<<"左移,“|”逻辑或运算 } |
C# 二种方法控制系统音量/麦克风大小的更多相关文章
- mysql 远程连接数据库的二种方法
http://blog.csdn.net/freecodetor/article/details/5799550 一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5 ...
- IIS7.5使用web.config设置伪静态的二种方法
转自 网上赚钱自学网 .http://www.whosmall.com/post/121 近几天公司里开发的项目有几个运行在IIS7.5上,由于全站采用的是伪静态,因此从网上找到两两种方法来实现.这两 ...
- mysql 远程连接数据库的二种方法
一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5.116),端口"3306",用户名为"root",密码"123 ...
- XML解析的二种方法之dom解析
XML解析的二种方法:dom解析和sax解析 文件大小 存储位置 读取速度 dom解析 小文件 放在内存中 快 sax解析 ...
- debian7更换gcc版本的二种方法分享
debian7更换gcc版本的二种方法分享 最近在编译qt,之前用的是debian6,gcc版本是gcc-4.4,当使用debian7时,编译遇到了很多跟debian6不一样的问题,debian7 ...
- SQL 2005批量插入数据的二种方法
SQL 2005批量插入数据的二种方法 Posted on 2010-07-22 18:13 moss_tan_jun 阅读(2635) 评论(2) 编辑 收藏 在SQL Server 中插入一条数据 ...
- 转 mysql 远程连接数据库的二种方法
mysql 远程连接数据库的二种方法 一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456” ...
- 【转】Android下编译jni库的二种方法(含示例)
原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...
- 【转】Android下编译jni库的二种方法(含示例) -- 不错
原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...
随机推荐
- luoguP4705 玩游戏 分治FFT
\[ \begin{aligned} Ans(k) &= \sum \limits_{i = 1}^n \sum \limits_{j = 1}^m \sum \limits_{t = 0}^ ...
- pygame系列_小球完全弹性碰撞游戏_源码下载
之前做了一个基于python的tkinter的小球完全碰撞游戏: python开发_tkinter_小球完全弹性碰撞游戏_源码下载 今天利用业余时间,写了一个功能要强大一些的小球完全碰撞游戏: 游戏名 ...
- 用C扩展Python3
官方文档: https://docs.python.org/3/extending/index.html 交叉编译到aarch64上面 以交叉编译到aarch64上面为例,下面是Extest.c的实现 ...
- AngularJS表单验证,手动验证或自动验证
AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证. 手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件:1.给form元 ...
- 初识序列化和反序列化,使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化
序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程.对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程.本篇主要包括: ● 使用 ...
- rest api上传和下载文件
rest api上传和下载文件 function FileToString(AFileName: string): string; var LMemoryStream: TMemoryStream; ...
- 越狱的 ios 如何 获取 读取 提取 手机上的 短信 通话记录 联系人 等信息
http://willson.sinaapp.com/2011/12/iphone 获取短信脚本.html Iphone获取短信脚本http://bbs.9ria.com/thread-209349 ...
- WebApp分析建模的工具
最近Web工程课在学习分析建模工具的内容.这周作业就写我对WebApp建模工具的认识.Web建模工具有很多,但是专门为分析开发的却相对很少.下面介绍在进行分析时可以用的四类工具. UML工具.使用统一 ...
- iOS 去掉UITableView风格为group时候的最顶部的空白距离
CGRect frame=CGRectMake(0, 0, 0, CGFLOAT_MIN); self.tableView.tableHeaderView=[[UIView alloc]initW ...
- python测试开发django-30.发送附件EmailMessage
前言 Django的 send_mail() 和 send_mass_mail() 函式事实上是对 EmailMessage 类使用方式 的一个轻度封装.send_mail() 和相关的其他封装函式并 ...