如何控制系统音量,但不能调用控制面板?

原创 2004年07月14日 14:14:00

  可以先编写一个控制音量的类,然后在窗体中Uses这个类,加入两个TrackBar【分别为左右声道,Min:=0;Max=255】与两个CheckBox【用于设置是否静音和两声道音量同步】,然后编写代码就可以了。

//--[Yoyoworks]----------------------------------------------------------------
//工程名称:prjPowerFlashPlayer
//软件名称:iPowerFlashPlayer
//单元作者:许子健
//开始日期:2004年03月14日,14:31:16
//单元功能:用于音量调整的类。
//-----------------------------------------------------------[SHANGHAi|CHiNA]--

Unit untTVolume;

Interface

Uses
  MMSystem
, SysUtils;

Type
  TVolume
= Class(TObject) 
 
Private
    FVolume
: LongInt; //
存储音量。
    FIsMute
: Boolean; //
存储静音值。
    Procedure SetLeftVolume(Volume: Integer); //
设置左声道的音量。
    Function GetLeftVolume: Integer; //
获得左声道的音量。
   
Procedure SetRightVolume(Volume: Integer); //
设置右声道的音量。
   
Function GetRightVolume: Integer; //
获得右声道的音量。
   
Procedure SetIsMute(IsMute: Boolean); //设置是否静音。
 
Public
   
Constructor Create;
   
Destructor Destroy; Override;
 
 Published
   
 Property LeftVolume: Integer Read GetLeftVolume Write SetLeftVolume;
   
 Property RightVolume: Integer Read GetRightVolume Write SetRightVolume;
   
 Property Mute: Boolean Read FIsMute Write SetIsMute;
 
 End;

Implementation

// -----------------------------------------------------------------------------
// 过程名:   TVolume.Create
//
参数:     
//
返回值:   
// -----------------------------------------------------------------------------

Constructor TVolume.Create;
Begin
 
 Inherited Create;
  FVolume
:= 0;
  FIsMute
:= False;
  
//
初始化变量
  waveOutGetVolume
(0, @FVolume); //得到现在音量
End;

// -----------------------------------------------------------------------------
// 过程名:   TVolume.Destroy
// 参数:     
// 返回值:   
// -----------------------------------------------------------------------------

Destructor TVolume.Destroy;
Begin
 
 Inherited Destroy;
End;

// -----------------------------------------------------------------------------
// 过程名:   TVolume.SetLeftVolume
// 参数:     Volume: Integer
// 返回值:   
// -----------------------------------------------------------------------------

Procedure TVolume.SetLeftVolume(Volume: Integer);
Begin
 
 If (Volume < 0) Or (Volume > 255) Then
   
 Raise Exception.Create('Range error of the left channel [0 to 255].');
  
//
如果“Volume”参数不在0255的范围里,则抛出异常。

 
 If FIsMute = False Then
   
 Begin
      waveOutGetVolume
(0, @FVolume);
      
//@
示指向变量Volume的指针(32位),调用此函数的用意就是得到右声道的值,做到在调节左声道的时候,不改变右声道。
      FVolume
:= FVolume And $FFFF0000 Or (Volume Shl 8); //
数字前加$表示是十六进制
      waveOutSetVolume
(0, FVolume);
   
 End
      
//
如果不是静音状态,则改变音量;
 
 Else
    FVolume
:= FVolume And $FFFF0000 Or (Volume Shl 8);
  
//否则,只改变变量。

End;

// -----------------------------------------------------------------------------
//
过程名:   TVolume.SetRightVolume
// 参数:     Volume: Integer
//
返回值:   
// -----------------------------------------------------------------------------

Procedure TVolume.SetRightVolume(Volume: Integer);
Begin
 
 If (Volume < 0) Or (Volume > 255) Then
   
 Raise Exception.Create('Range error of the right channel [0 to 255].');

 
 If FIsMute = False Then
   
 Begin
      waveOutGetVolume
(0, @FVolume);
      FVolume
:= FVolume And $0000FFFF Or (Volume Shl 24);
      waveOutSetVolume
(0, FVolume);
   
 End
 
 Else
    FVolume
:= FVolume And $0000FFFF Or (Volume Shl 24);
End;

// -----------------------------------------------------------------------------
//
过程名:   TVolume.SetIsMute
// 参数:     IsMute: Boolean
//
返回值:   
// -----------------------------------------------------------------------------

Procedure TVolume.SetIsMute(IsMute: Boolean);
Begin
  FIsMute
:= IsMute;
 
 If FIsMute = True Then
    waveOutSetVolume
(0, 0)
 
 Else
    waveOutSetVolume
(0, FVolume);
End;

// -----------------------------------------------------------------------------
// 函数名:   TVolume.GetLeftVolume
//
参数:     
//
返回值:   Integer
// -----------------------------------------------------------------------------

Function TVolume.GetLeftVolume: Integer;
Begin
 
 If FIsMute = False Then
    waveOutGetVolume
(0, @FVolume); //
得到现在音量
  Result
:= Hi(FVolume); //转换成数字

End;

// -----------------------------------------------------------------------------
// 函数名:   TVolume.GetRightVolume
//
参数:     
//
返回值:   Integer
// -----------------------------------------------------------------------------

Function TVolume.GetRightVolume: Integer;
Begin
 
 If FIsMute = False Then
    waveOutGetVolume
(0, @FVolume); //
得到现在音量
  Result
:= Hi(FVolume Shr 16); //
转换成数字
End;

End.

[C#] 控制系统音量-第二章

网上能找到控制电脑音量是能够实现的,但是只支持XP系统;这无疑是糟糕的;现在这个阶段使用XP的还有多少? 本篇为支持Win7及其以上版本音量控制而生。 使用C#语言开发,界面是WPF界面;简单介绍在W...
  • qiujuer
  • qiujuer
  • 2014年11月29日 14:02
  • 4285

获得与设置系统默认设备主音量音量大小以及静音控制函数

CoreApi::CoreApi(void) {  CoInitializeEx(NULL, COINIT_MULTITHREADED);   } CoreApi::~CoreApi(vo...
  • wishfly
  • wishfly
  • 2015年12月22日 18:32
  • 1499

Android通过SeekBar控制系统音量

通过SeekBar控制音量大小可以带来良好的用户体验并且直观地展现当前音量大小。1.自定义SeekBar样式由于系统自带的SeekBar样式一般不满足日常开发需求,所以需要我们去自定义样式。这里就简单...
  • a1533588867
  • a1533588867
  • 2016年12月19日 12:16
  • 1452

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

场景:在走播放设备的时候需要控制音量的大小,下面几种方法将满足你的要求 方法一: 改变系统         [DllImport("user32.dll")]         static exter...
  • taoerit
  • taoerit
  • 2015年01月24日 16:19
  • 2639

VC++控制音量

《Visual C++开发技术大全》第26章声音与动画编程,本章讲述在VC 6.0环境下,如何使用Win32、GDI、GDI+、DirectShow等开发接口实现声音与动画的处理。本小节为大家介绍控制...
  • Augusdi
  • Augusdi
  • 2013年04月04日 23:20
  • 6412

用VC控制系统音量

1、头文件(Mixer.h) // Mixer.h: interface for the CMixer class. // /////////////////////////////////...
  • danming60520
  • danming60520
  • 2014年07月21日 13:47
  • 779

用VC控制系统音量

1、头文件(Mixer.h) // Mixer.h: interface for the CMixer class. // ///////////////////////////////////...
  • ccx_john
  • ccx_john
  • 2013年11月05日 16:49
  • 723

用VC控制系统音量

http://hi.baidu.com/whmtorrent/item/b4c711050e38a334a2332a691、头文件(Mixer.h)// Mixer.h: interface for ...
  • Augusdi
  • Augusdi
  • 2013年04月04日 23:31
  • 3376

iOS 控制系统的音量改变

iOS监控和控制系统的音量,自定义系统的音量
  • qq_32010299
  • qq_32010299
  • 2016年05月04日 13:12
  • 5878

[C#] 控制系统音量-第一章

一直想控制系统音量,但是似乎C#都有着很多的问题,索性去看API。 最后找到了一个外国友人的东西,外国友人写的类就是好看,感觉比自己写的要规范好多啊! 自己使用了此类后发现了一个问题,在XP系统下...
  • qiujuer
  • qiujuer
  • 2014年03月06日 17:12
  • 2582
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何控制系统音量,但不能调用控制面板?
举报原因:
原因补充:

(最多只允许输入30个字)