Montag, 27. Dezember 2010

Ton ausschalten (Windows XP / Vista / 7)

Im Post Ton ausschalten / Lautstärke einstellen stellte ich vor, wie man den PC stumm stellen und die Lautstärke anpassen kann. Die vorgestellte Methode funktioniert allerdings nur mit Windows XP.
Deswegen zeige ich in diesem Post kurz, wie man unter Windows Vista und 7 (aber auch XP kompatibel) den PC stummschalten (muten) kann.
Die Lösung führt uns wieder über die WinAPI,
weswegen folgende using - Direktive nötig ist: using System.Runtime.InteropServices;.
Die benötigte P/Invoke Methode heißt SendMessageW und hat die Signatur IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam).
Diese Funktion schickt eine Nachricht an ein bestimmtes Programm oder Fenster.
Um den Ton am PC auszuschalten, schicken wir den richtigen Befehl an einen Systemprozess.
Und so sieht der Code im Ganzen aus:
Der Deklarationsteil:

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

        private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
        private const int WM_APPCOMMAND = 0x319;

Und die Funktion:

private void Mute()
{
    SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);
}

Kommentare:

  1. Hey,

    nettes Tutorial

    ich habe eine Frage

    ich will den Ton nicht nur Muten, sonder brauche quasie einen Getter und Setter

    Ich möchte gerne auslesen, wo der Volume Wert gerade steht und ich möchte ihn auch setzen können.

    kannst du da weiter helfen???

    Gruß
    Sebastian

    AntwortenLöschen
  2. Nett, aber nicht wirklich hilfreich. Mit der mute function kann man nur mute toggeln, also ein UND ausschalten. Welchen status man derzeit hat erfährt man nicht.

    Um die lautstärke zu ändern (nicht nur lauter/leiser, sondern auch auslesen) hab ich das hier gefunden:
    http://www.geekpedia.com/tutorial176_Get-and-set-the-wave-sound-volume.html
    Das ändert aber nur die lautsärke für die ausführende applikation... und mute geht auch nur zu toggeln. (gleiche funktion wie von Oliver... wsl ist aus so nem beispiel die mute function rauskopiert)

    Um bei winXP die mastervolume anzupassen empfehle ich das hier:
    http://stackoverflow.com/questions/294292/changing-master-volume-level
    Hier kann man explizit mute ein/ausschalten und auch die lautstärke prima anpassen... der code hat natürlich auch nachteile (volume und mute kann man (meines wissens) nicht auslesen)

    Für mastervolume control unter win vista/7 benutze ich das hier:
    http://www.codeproject.com/KB/vista/CoreAudio.aspx
    unter win7 geht damit alles, bei vista kann man aber nicht mute/unmute setzen

    AntwortenLöschen
  3. Wegen dem Ton:

    Aus: private const int APPCOMMAND_VOLUME_MUTE = 0x80000;

    An:private const int APPCOMMAND_VOLUME_FULL = 0xA0000;

    AntwortenLöschen
  4. Rechtklick auf den Desktop >> Anpassen >> Sounds >> Windows-Startsound wiedergeben

    da nimmst du einfach den Haken weg und es sollte weg sein

    AntwortenLöschen