〓■300分求解:Vista下如何让系统静音或打开声音阿?■〓 ( 积分: 300 )

  • 主题发起人 主题发起人 jimowutong
  • 开始时间 开始时间
J

jimowutong

Unregistered / Unconfirmed
GUEST, unregistred user!
请注意,下面这种在2k或XP下可用但对Vista无效:
procedure SetVolumeMute(Value: Boolean);
var
hMix: HMIXER;
mxlc: MIXERLINECONTROLS;
mxcd: TMIXERCONTROLDETAILS;
mxc: MIXERCONTROL;
mxl: TMixerLine;
intRet: Integer;
nMixerDevs: Integer;
mcdMute: MIXERCONTROLDETAILS_BOOLEAN;
begin
try
// Check if Mixer is available
nMixerDevs := mixerGetNumDevs();
if (nMixerDevs < 1) then
begin
Exit;
end;

// open the mixer
intRet := mixerOpen(@hMix, 0, 0, 0, 0);
if intRet = MMSYSERR_NOERROR then
begin
mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mxl.cbStruct := SizeOf(mxl);

// mixerline info
intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);

if intRet = MMSYSERR_NOERROR then
begin
FillChar(mxlc, SizeOf(mxlc), 0);
mxlc.cbStruct := SizeOf(mxlc);
mxlc.dwLineID := mxl.dwLineID;
mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls := 1;
mxlc.cbmxctrl := SizeOf(mxc);
mxlc.pamxctrl := @mxc;

// Get the mute control
intRet := mixerGetLineControls(hMix, @mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);

if intRet = MMSYSERR_NOERROR then
begin
FillChar(mxcd, SizeOf(mxcd), 0);
mxcd.cbStruct := SizeOf(TMIXERCONTROLDETAILS);
mxcd.dwControlID := mxc.dwControlID;
mxcd.cChannels := 1;
mxcd.cbDetails := SizeOf(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails := @mcdMute;

// Set and UnSet mute
mcdMute.fValue := Ord(Value);
intRet := mixerSetControlDetails(hMix, @mxcd,
MIXER_SETCONTROLDETAILSF_VALUE);

{if intRet <> MMSYSERR_NOERROR then
ShowMessage('SetControlDetails Error');}
end
else
{ShowMessage('GetLineInfo Error'); }
end;

mixerClose(hMix);
end;
except
on Exception do ;
end;
end;
===========================================================================
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1631182&SiteID=1
上面网址有相关探讨,可惜我不会用

谁能搞定的话我的QQ: 44401015
非常感谢。
 
我没玩过vista,不过你可以尝试采用修改注册表的方式去使系统静音,一般涉及操作系统的东西都可以按这个思路去做,祝你好运!
 
to qlx_zxm@163:

我需要的静音或取消静音要求是实时的,注册表方式就算能实现,能做到立即生效么?
 
注册表是不行的!
我可以实现音量的调节,但是静音还没有试过,不过音量到0和静音没什么区别吧?用mmsystem单元实现的
 
我修改系统时间格式时就可以即时生效,因为我用了下面这行代码
SendMessageTimeOut(HWND_BROADCAST,WM_SETTINGCHANGE,0,0,SMTO_ABORTIFHUNG,10,p);//修改完成后必须调用,通知其他程序信息已经更改,否则即使是程序自身也不能使用新设置
p是dword类型的局部变量
 
帮你顶一个,顺便发个交流群:
无论你是超极菜鸟,亦或是绝顶高手,在这里偶们静下心来平等地交流学习:
delphi交流群:4654765(delphi天堂)欢迎您的加入!让我们共同进步!!
加入者必须改名片为:{地点}+姓名 注:不改者勿扰!
 
对了,你这个源程序我怎么编译都不行啊,HMIXER是什么东西啊
 
现在的 Vista 给我的感觉就是当年的 WinXP,当年的 WinXP 本身不稳定,特别是对硬件
的支持,我的电视卡可以用,但问题多多,经常打不开,或者无声等等,WinXPsp1 好了
些,WinXPsp2 更好,连 Win98 版的驱程也可以安装使用,现在的 Vista 也有这个问题,
电视卡可看电视,但收音机程序死机,声卡的 lineIn 无声,我看要等多几年,等 sp2
出来了,再用不迟,所以老兄的问题,也不能排除是这方面的原因。
 
后退
顶部