用C# 控制Windows系统音量的实现方法_C 语言

C#开发Windows应用程序中经常需要去控制系统的音量,分两种方式:

1.使用Win Api控制

2.使用C++ dll控制

Win Api控制:

  使用user32.dll和winmm.dll都可以控制系统音量,区别是Win系统的版本。winmm.dll Xp环境下可用,user32.dll Vista及以上版本。

C++ dll控制:

  CoreAudioApi 是C++ 第三方封装了音量控制,网上下载DLL后再项目中引用即可使用。CoreAudioApi Vista及以上版本支持。

下面给出代码

1.winmm控制方式,涉及Xp系统波形声音的左右声道,高位为左声道,低位为右声道:

复制代码 代码如下:

winmm
 [DllImport("winmm.dll", EntryPoint = "waveOutSetVolume")]
 public static extern int WaveOutSetVolume(IntPtr hwo, uint dwVolume);

 private void SetVol(double arg){
     double newVolume = ushort.MaxValue * arg / 10.0;

     uint v = ((uint)newVolume) & 0xffff;
     uint vAll = v | (v << 16);

     int retVal = WaveOutSetVolume(IntPtr.Zero, vAll);
 }

2.user32控制方式:

复制代码 代码如下:

user32
 [DllImport("user32.dll")]
 public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

 public void SetVol(){
     p = Process.GetCurrentProcess();
     for (int i = 0; i < 5; i++) {
     SendMessageW(p.Handle, WM_APPCOMMAND, p.Handle, (IntPtr)APPCOMMAND_VOLUME_UP);
     }
 }

 private Process p;
 private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
 private const int APPCOMMAND_VOLUME_UP = 0x0a0000;
 private const int APPCOMMAND_VOLUME_DOWN = 0x090000;
 private const int WM_APPCOMMAND = 0x319;

3.CoreAudioApi

复制代码 代码如下:

CoreAudioApi
 Using CoreAudioApi;

 public void SetVol(double arg) {
     device = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
     device.AudioEndpointVolume.MasterVolumeLevelScalar = (float)arg;
 }

 private MMDevice device;
 private MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();

时间: 2024-09-27 08:30:37

用C# 控制Windows系统音量的实现方法_C 语言的相关文章

VC实现Windows多显示器编程的方法_C 语言

本文实例讲述了VC实现Windows多显示器编程的方法.分享给大家供大家参考.具体如下: 一.Windows中接入多个显示器时,可设置为复制和扩展屏. 1.设置为复制屏幕时,多个显示器的分辨率是一样的,位置为0~分辨率值 2.设置为扩展屏幕时,显示器之间的关系比较复杂些.首先Windows系统会识别一个主显示器,这个可以在屏幕分辨率中更改.多个显示器之间的位置关系也可以再屏幕分辨率中更改.其中主显示器的位置为(0,0)到(width,height),其他显示器位置由与主显示器的位置关系决定,在主

在C++程序中开启和禁用Windows设备的无线网卡的方法_C 语言

1.列出当前网卡:SetupDiEnumDeviceInfo 2.找出当前无线网卡的名字(用natvie wifi api) 3.卸载\安装此驱动 问题: log为:SetupDiSetClassInstallParams failed. -536870347   完整代码如下: // ControlWirelessCard.cpp : Defines the entry point for the console application. // #include "stdafx.h"

Windows系统自动登陆的方法

Windows系统自动登陆的方法,支持XP 2003 win7 win2008系统哦 在Windows 中单击"开始→运行" 输入 rundll32 netplwiz.dll,UsersRunDll (注意大小写及空格), 然后进入"用户账户"操作窗口 取消对"要使用本机,用户必须输入用户名及密码"项的选择.-->点击确定 在接下来弹出的对话框中输入你想让电脑每次自动登录的账户名及其密码.

C#中控制远程计算机的服务的方法_C#教程

在.net中提供了一些类来显示和控制Windows系统上的服务,并可以实现对远程计算机服务服务的访问,如System.ServiceProcess命名空间下面的ServiceController 类,System.Management下面的一些WMI操作的类.虽然用ServiceController可以很方便的实现对服务的控制,而且很直观.简洁和容易理解.但是我认为他的功能同通过WMI来操作服务相比,那可能就有些单一了,并且对多个服务的操作可能就比较麻烦,也无法列出系统中的所有服务的具体数据.这

普通用户维护Windows系统八大必知方法

window 尽管现在早已是Windowsxp/2003的天下了,但我们知道,windows本身是一个非常开放.同时也是非常脆弱的系统,稍微使用不慎就可能会导致系统受损,甚至瘫痪.而如果是经常进行应用程序的安装与卸载也会造成系统的运行速度降低.系统应用程序冲突明显增加等等问题的出现.这些问题导致的最终后果就是不得不重新安装windows. Windows98没有提供非常完善的系统维护与优化功能,它提供的"维护向导"的功能实在是太有限了.加上系统并没有提供对注册表控制系统设置的管理功能,

Windows系统Tab键使用方法

Tab键是哪个? #@&----@! 好了,不开玩笑了,下面聊聊Windows系统下面Tab键的各种用法,会的请绕行,不会的请板凳. 基本用法 1.改变焦点 聚焦到下一个按钮,输入框或者链接等.例如:关闭一个未保存的记事本,会弹出一个提示,此时,"是"按钮上有一个虚线框,如果按下空格或者回车就相当于用鼠标点击了"是"按钮.想用键盘来"点击""否"按钮的话,按下 Tab 键,虚线框就会转移到"否"上,

利用百度电脑专家修复windows系统蓝屏的方法

  windows系统下的dll文件通常是保证某些软件与游戏正常运行的重要组件,当系统在出现某些dll文件损坏或丢失时,我们运行软件或游戏,系统将弹窗提示"XXX.dll丢失或损坏"的错误提示,对于这一问题,用户可通过使用百度电脑专家来解决,下面小编就为大家带来了百度电脑专家修复DLL文件的方法,如果你的电脑也出现了DLL文件丢失的问题,那么赶快尝试下吧!   环境:Win2003, Win2008, WinXP, Vista, Win7查看详情立即下载 操作方法 1.我们在安装并打开

Windows的钩子机制详解_C 语言

一.概述: 了解windows程序设计的人都知道,Windows系统程序的运行是建立在消息传递机制的基础之上的,几乎所有的程序活动都由消息来驱动.钩子机制可以看作是一个消息的中转站,控制系统发出消息的处理和传递.利用钩子,我们可以截获系统发给应用程序的消息,并且在经过处理后决定是否将消息再发给下一个应用程序.利用钩子的这一特性,我们可以创建一个监控程序,收集和控制系统发出的消息. 二.Windows钩子程序的编制 编制Windows的钩子程序,需要用到几个SDK中的API函数.下面列出这几个函数

Windows进程崩溃问题的定位方法_C 语言

Linux上进程崩溃通常会生成core文件,用gdb打开后执行bt命令即可查看堆栈.而在Windows平台上,我们通常会采用MiniDumpWriteDump来进行堆栈转储,而这需要对系统Api有一定的了解和编写一些代码.本文就结合实际项目经验,总结了一种无需编码即可记录进程崩溃堆栈的方法. 原理简介:使用nstd工具进行进程崩溃时内存和堆栈转储. 编译Release版本时打开调试选项,将exe和pdb文件一起发布. 2.使用批处理命令设置Windows系统在进程崩溃时调用的调试器为ntsd 复