Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Tonausgabe komplett abschalten (https://www.delphipraxis.net/80762-tonausgabe-komplett-abschalten.html)

yankee 14. Nov 2006 21:24


Tonausgabe komplett abschalten
 
Hi @ll,

ich will von Windows den kompletten Ton ausschalten... Also so, wie wenn man beim Hauptlautstärkeregler auf "Ton aus" klickt...
Das geht doch bestimmt über die WinAPI...
Aber wie?

Sunlight7 14. Nov 2006 23:47

Re: Tonausgabe komplett abschalten
 
Ein Fall für die Mixer-Controls, MSDN-Library durchsuchenmixerOpen, etc.

SirThornberry 15. Nov 2006 06:22

Re: Tonausgabe komplett abschalten
 
ich hab den Ton bisher so abgeschalten in einem meiner Programme:
Delphi-Quellcode:
class function TDeskSwitcher.SetMute(AMute: Boolean): Boolean;
  function GetMasterMute(AMixer: hMixerObj; var AMixerControl: TMixerControl): Boolean;
  var LMixerLine: TMixerLine;
      LMixerLineCtrls: TMixerLineControls;
  begin
    ZeroMemory(@LMixerLine, SizeOf(LMixerLine));
    LMixerLine.cbStruct := SizeOf(LMixerLine);
    LMixerLine.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
    if mixerGetLineInfo(AMixer, @LMixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR then
    begin
      ZeroMemory(@LMixerLineCtrls, SizeOf(LMixerLineCtrls));
      LMixerLineCtrls.cbStruct := SizeOf(LMixerLineCtrls);
      LMixerLineCtrls.dwLineID := LMixerLine.dwLineID;
      LMixerLineCtrls.cControls := 2;
      LMixerLineCtrls.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
      LMixerLineCtrls.cbmxctrl := SizeOf(AMixerControl);
      LMixerLineCtrls.pamxctrl := @AMixerControl;
      result := MMSYSERR_NOERROR = mixerGetLineControls(AMixer, @LMixerLineCtrls, MIXER_GETLineCONTROLSF_ONEBYTYPE);
    end else
      result := False;
  end;
var LMasterControl: TMixerControl;
    LDetails: TMixerControlDetails;
    LBoolDetails: TMixerControlDetailsBoolean;
begin
  if GetMasterMute(0, LMasterControl) then
  begin
    with LDetails do
    begin
      cbStruct := SizeOf(LDetails);
      dwControlID := LMasterControl.dwControlID;
      cChannels := 1;
      cMultipleItems := 0;
      cbDetails := SizeOf(LBoolDetails);
      paDetails := @LBoolDetails;
    end;
    LongBool(LBoolDetails.fValue) := AMute;
    result := MMSYSERR_NOERROR = mixerSetControlDetails(0, @LDetails, MIXER_SETCONTROLDETAILSF_VALUE);
  end else
    result := False;
end;

DP-Maintenance 15. Nov 2006 06:39

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Windows API / MS.NET Framework API" nach "Multimedia" verschoben.

yankee 15. Nov 2006 15:58

Re: Tonausgabe komplett abschalten
 
Zitat:

Zitat von SirThornberry
ich hab den Ton bisher so abgeschalten in einem meiner Programme:

Super :thumb:

Nur dass class davor weg und den Funktionsname ändern und alles ist super *gg*.

Und
Delphi-Quellcode:
uses MMSystem;

Sunlight7 16. Nov 2006 04:25

Re: Tonausgabe komplett abschalten
 
Ja, so kann mans auch machen :cyclops:

:idea: Das kannste doch gleich in die CodeLib stellen, wenn Du yankees Änderungen machst und "TDeskSwitcher". entfernst :zwinker:

DennisHB 16. Nov 2006 05:17

Re: Tonausgabe komplett abschalten
 
Gibt es auch eine Möglichkeit einzelnen Programmen/DLLs zu Muten

ich würde gerne Flash(.swf) dauerhaft stumm schalten (Adobe/Macromedia bietet diese Einstellung leider nicht) ebenso alles andere was im Browser geöffnet wird (Sprich Firefox stumm schalten / mein Soundblocker greift leider nicht alles)

2 Spiele würd ich gleich noch mit auf die Liste setzen :)

also kann man einer Anwendung verbieten nen Muks zu machen?
WinAmp sollte aber weiter hörbare :) Musik von sich geben können

Mackhack 27. Mär 2007 23:51

Re: Tonausgabe komplett abschalten
 
Zitat:

Zitat von DennisHB
Gibt es auch eine Möglichkeit einzelnen Programmen/DLLs zu Muten

ich würde gerne Flash(.swf) dauerhaft stumm schalten (Adobe/Macromedia bietet diese Einstellung leider nicht) ebenso alles andere was im Browser geöffnet wird (Sprich Firefox stumm schalten / mein Soundblocker greift leider nicht alles)

2 Spiele würd ich gleich noch mit auf die Liste setzen :)

also kann man einer Anwendung verbieten nen Muks zu machen?
WinAmp sollte aber weiter hörbare :) Musik von sich geben können

In Vista kannst du jedem Programm die eigene Lautstaerke vorgeben oder auch Muten!

hw24 30. Apr 2007 12:01

Re: Tonausgabe komplett abschalten
 
Hi Leuts,

dieses MasterMute Dings hab ich bisher auch benutzt, ist aber unter Vista leider alles Banane :gruebel:
Ich krieg Windows nicht dazu, die Lautsprecher abzuschalten, auch das Systray-Icon reagiert nicht.

Was funktioniert, ist die Abschaltung über das Keyboard :!:,
Es muss doch möglich sein, irgendwie diese APPCOMMAND_VOLUME_MUTE Message auch per Programm zu generieren und an .... wen eigentlich :?: zu senden.

Hat da irgendwer der Experten einen Tip ?
Bevor hier jemand vorschnell antwortet: Unter XP läuft alles wie hier beschrieben, es geht hier NUR um Win Vista !

Gruß, Harry


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz