# Kann man die Lautstärke mit einer Batch Datei ändern?



## ArFiBa (12. Juni 2006)

Hallo,
mein ISDN Monitor ist in der Lage bei einem eingehenden Anruf automatisch eine Batch Datei aufzuführen. Nun würde ich gerne eine erstellen, welche die Windows Lautstärke reduziert.

Ist so was überhaupt machbar und wenn ja wie?

Danke für eure Hilfe


----------



## santange (12. Juni 2006)

Unter Windows ist das Programm SNDVOL32.EXE für die Regelung der Lautstärke verantwortlich. Das Windows-Zubehör bietet allerdings nur eine grafische Bedienerführung und keine Startparameter zum Stummschalten, die sich in einer Verknüpfung unterbringen ließen. 

Es gibt eine Möglichkeit via VBS und dann dieses per CMD oder BAT starten.
Habe folgendes VBS im Netz gefundnen, hoffe es hilft dir weiter.



```
Set WSHShell = CreateObject("WScript.Shell")

'Der Titel des Fensters von SNDVOL32.EXE lautet "Lautstärke" oder "Play Control"
'Wenn die Anwendung schon läuft, dann wird sie aktiviert und mit SendKeys stummgeschaltet.
'Sollte sie noch nicht laufen, wird sie kurzerhand gestartet. Funktioniert jetzt auch 
'unter Windows XP

FensterTitel1 = "Lautstärke"
FensterTitel2 = "Play Control"
If Not (WSHShell.AppActivate(FensterTitel1)) And Not (WSHShell.AppActivate(FensterTitel2)) Then WSHShell.Run "Sndvol32.exe"

'Ab dieser Stelle, wissen wir, dass SNDVOL32.EXE auf jeden Fall läuft.
'Jetzt ergibt sich das Problem, dass Sendkeys nicht weiss, wann die Anwendung
'richtig initialisiert ist und auf Tastaturkommandos reagiert.
'Damit SendKeys nicht ins Leere läuft, überprüfen wir, wann "Lautstärke" reagiert.

If Not (WartenBisAktiv(FensterTitel1, 5)) And Not (WartenBisAktiv(FensterTitel2, 5)) Then
	Wscript.Echo ("Die Lautstärkeregelung konnte nicht initialisieert werden. Eventuell hat die Soundkarte ein eigenes Programm zur Lautstärkeregelung installiert.")
	Wscript.Quit
End If

On Error Resume Next
OS = WSHShell.RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProductName")
If InStr(OS, "XP") Then 
WSHShell.SendKeys "%(t)"
WSHShell.SendKeys " "
Else
WSHShell.SendKeys "%(l)"
End If

'Die folgende Zeile schliesst die Lautstärkenregelung sofort wieder
WSHShell.SendKeys "%{F4}"

'Die Funktion WartenBisAktiv(FensterTitel, Zeitlimit) ist nichts anderes, als ein Loop,
'in dem bei jedem Schritt probiert wird, die Applikation zu aktivieren.
'Es wird mit "ZeitLimit" ein allgemeiner Timeout gesetzt. An diesen Timeout nähert sich schrittweise
'der Wert "WarteZeit" an. Entweder das "ZeitLimit" wird erreicht, dann ist die Anwendung nicht einsatzbereit
'und das Script bricht mit einem Hinweis ab. Oder die Anwendung hat sich nach einer bestimmten Zahl von 
'Schritten zurückgemeldet und SendKeys kann losgehen.

Function WartenBisAktiv(FensterTitel, ZeitLimit)
 WarteZeit = 100
 Zeit = ZeitLimit* 100
  Do Until WSHShell.AppActivate(FensterTitel) or (Zeit <= 0)
  WScript.Sleep WarteZeit
  Zeit = Zeit - WarteZeit
  Loop
 WartenBisAktiv = (Zeit > 0)
End Function
```


----------

