♣
自己写的一个控制音量的类,能控制所有音量。(没完成,期待大家共同探讨)-没分的,我也穷啊!
用amixer 在xp下不正常,参照相关资料自己写了一个。
但是目前还不能实现设置静音和获取静音的函数。
本来想继续弄的,发现头好疼。看来今天是弄不出来了。
要睡觉了。
如果大虾们觉得有意思,帮忙弄一下咯。也好造福scdn的鸟鸟们。
ps:我就是一个绝对的菜鸟。
代码如下:
发现一个问题,当前音频设备的id号如果为1,那么控制他是否静音的就是2。但是不知道如果该设备有除了静音以外的另外一个选项的时候,是不是还是这样的。
期待ing,实在要睡觉了!
---------------------------------
unit setvol;
interface
uses windows,mmsystem;
type
tvolume=record
left,right:word;
end;
procedure fillstruct(control:pmixercontrol;var cdetails:tmixercontroldetails);
function getpeak(control:pmixercontrol;var peak:integer):boolean;
function setvolume(control:pmixercontrol; volume:tvolume):boolean;
function getvolume(control:pmixercontrol; volume:tvolume):boolean;
function setism(control:pmixercontrol; volume:tvolume;mute:boolean = true):boolean;
function getism(control:pmixercontrol; volume:tvolume):boolean;
var
mcontrols:array of pmixercontrol;
fmixerhandle:hmixer;
implementation
procedure fillstruct(control:pmixercontrol;var cdetails:tmixercontroldetails);
begin
cdetails.cbstruct:=sizeof(cdetails);
cdetails.dwcontrolid:=control.dwcontrolid;
cdetails.cbdetails:=sizeof(integer);
cdetails.hwndowner:=0;
end;
function getpeak(control:pmixercontrol;var peak:integer):boolean;
var
details:tmixercontroldetailssigned;
cdetails:tmixercontroldetails;
begin
result:=false;
if control.dwcontroltype<> mixercontrol_controltype_peakmeter then exit;
cdetails.cchannels:=1;
cdetails.padetails:=@details;
fillstruct(control,cdetails);
result:=mixergetcontroldetails(fmixerhandle,@cdetails,mixer_getcontroldetailsf_value)=0;
end;
///--------------------------
/// 设置音量的函数
///--------------------------
function setvolume(control:pmixercontrol; volume:tvolume):boolean;
var
details:array[0..30] of integer;
cdetails:tmixercontroldetails;
begin
fillstruct(control,cdetails);
cdetails.cchannels:=2;
cdetails.padetails:=@details;
details[0]:=volume.left;
details[1]:=volume.right;
result:=mixersetcontroldetails(fmixerhandle,@cdetails,mixer_getcontroldetailsf_value)=0;
volume.left:=details[0];
volume.right:=details[1];
end;
///--------------------------
/// 获取音量的函数
///--------------------------
function getvolume(control:pmixercontrol; volume:tvolume):boolean;
var
details:array[0..30] of integer;
cdetails:tmixercontroldetails;
begin
fillstruct(control,cdetails);
cdetails.cchannels:=2;
cdetails.padetails:=@details;
result:=mixergetcontroldetails(fmixerhandle,@cdetails,mixer_getcontroldetailsf_value)=0;
volume.left:=details[0];
volume.right:=details[1];
end;
///--------------------------
/// 设置静音的函数 没弄出来
///--------------------------
function setism(control:pmixercontrol; volume:tvolume;mute:boolean = true):boolean;
var
details:array[0..30] of integer;
cdetails:tmixercontroldetails;
begin
control.dwcontrolid := control.dwcontrolid +1; //把id加上1就是对当前的设备静音控制??
fillstruct(control,cdetails);
cdetails.cchannels:=2;
case integer(mute) of
0:begin
volume.left := 0;
volume.right := 0;
end;
1:begin
volume.left := 1;
volume.right := 1;
end;
end;
cdetails.padetails:=@details;
result:=mixersetcontroldetails(fmixerhandle,@cdetails,mixer_getcontroldetailsf_value)=0;
volume.left:=details[0];
volume.right:=details[1];
end;
///--------------------------
/// 获取静音的函数 只是复制下来的,还没弄
///--------------------------
function getism(control:pmixercontrol; volume:tvolume):boolean;
var
details:array[0..30] of integer;
cdetails:tmixercontroldetails;
begin
fillstruct(control,cdetails);
cdetails.cchannels:=2;
cdetails.padetails:=@details;
result:=mixergetcontroldetails(fmixerhandle,@cdetails,mixer_getcontroldetailsf_value)=0;
volume.left:=details[0];
volume.right:=details[1];
end;
end.
· 网友精彩回答:
- 更多问题:
- · 没有IIS,如何是好呢
- · 操作系统有点让我寒心
- · 求正则表达式:url(abc.jpg),如何将这个字符串分为两个部分?
- · 高手一定要进来啊
- · 求助,我已经用IPicture接口能在对话框的控件上加在资源文件,但不知怎样读入外部文件
- · 急啊,关于显示全部子分类内容的SQL,请多帮忙,多谢!
- · 100分散,17:30结----6.0散尽千分
- · 在vs.net中如何在网页编程的一开始就可以固定页面字体的大小?
- · 怎么做能让层显示在<IFrame>的上边?
- · 这一句代码错在哪儿呢?
- · win2000/xp的用户信息存在什么地方?
- · 小菜问题系列
- · 急 急 显示器怎么倒过来显示了
- · 有什么方法可以有效地检查一个项目中的所有数据库操作的地方是否关闭了数据库连接呢?
- · 用VC6做的程序,怎么在XP上显示出XP的界面风格啊,谢谢!
- · tomcat集群的application变量共享问题!up就给分
- · 应用程序错误专题
- · 多线程编程 | 多线程
- · 控件技术指南
- · 格式化应用
- · 窗体编程 | 窗体
- · 网络编程
- · oracle 服务
- · firefox google
- · sql语言
- · sql查询语句
- · sql 排序
- · sql server 7.0
- · access violation
- · vc access
- · asp源码
- · asp id
- · 2001年10月浙江省自考互联网数据库真题
- · CNN评出25个典型的下一代互联网公司
- · 互联网法律
- · 开源博客平台Lifestype(原名Plog)介绍
- · 开源是什么意思
- · 自动化的给windows补丁分类
- · 请问windows进程管理器中的各个进程是什么意思?
- · windows程序设计
- · firefox火狐浏览器

