Sound-Wiedergabegerät per .bat (o.ä.) ändern

Kampfgnom

Lt. Commander
Registriert
Jan. 2005
Beiträge
1.075
Hi Leute,

Ich schalte jeden Abend, sobald die Familie ihre Ruhe haben will, das Wiedergabegerät von Lautsprecher (hinten am PC angeschlossen) auf Kopfhörer (vorne dran)
um.

Habt ihr ganz rein zufällig ne Idee wie ich das ganze auf einen (Doppel-)Klick reduzieren kann?
Also einen .bat, C(++), .net oder sonstwas Befehl, der dem Betriebssystem sagt dass er doch bitte das Gerät wechseln soll...

Wär echt Nett. Danke schonmal :)
 
Hey Kampfgnom...

Ich bin mir nicht sicher, aber kann es nicht sein, das das ein Anschluss an der Soundkarte ist, die nur immer prüft, wo Signale hingehen, und den anderen Ausgang (vorne bzw. hinten) dann "sperrt" ?

Ich suchte nämlich auch mal so etwas, aber bei meiner Recherche fand ich nichts...
Was hast du denn für ne Soundkarte ?
 
Ich habe vor ein paar Tagen meine Audigy 2 mit Apfelshorle übergossen :( Rest des PCs geht noch :)

Deswegen sitz ich an einem vergammelten Intel 975X Chipsatz...


Außerdem hätte ich gedacht dass es unter Vista immer so ist dass nur der eine Soundausgang angesprochen wird.
Zumindest konnte ich sogar ein Boxensystem an Audigy, eins an 975X-Hinten und Kopfhörer an 975X-Vorne anschließen und immer fröhlich zwischen den 3en wählen...


PS: Verkauft mir zufällig einer seine Audigy2/4? X-Fi ist nicht drin wegen Linux ;)
 
Kauf dir halt nen 3,5mm-Klinken-Y-Stecker, welcher den Sound auf zwei Geräte ausgeben kann. Nachts machst du die Boxen dann einfach aus. Ideal wären natürlich Kopfhöhrer mit Lautstärkeregelung dafür...

Aber Vorsicht: Es gibt Y-Stecker, die das Stereo-Signal vermischen. Funktionierende gibt's bei z.B. Reichelt glaub für unter 1 Euro zzgl Versand (im Elektrofachmarkt Preise bis zu 5-10 Euro/Stk).

Edit:
z.B. den hier...
http://www.reichelt.de/?ACTION=3;LA...;ARTICLE=13542;START=0;SORT=artnr;OFFSET=1000

Ich bin mir nicht sicher, aber kann es nicht sein, das das ein Anschluss an der Soundkarte ist, die nur immer prüft, wo Signale hingehen, und den anderen Ausgang (vorne bzw. hinten) dann "sperrt" ?
Ich vermute, er hat den Front-Ausgang an seinem onboard-Sound angeschlossen...

Eventuell könntest du auch versuchen, das Front-Audio-Panel an deiner Soundkarte anzuschließen.
 
Zuletzt bearbeitet:
Danke erstmal für die Antwort.

Zum Y-Stecker: Hab ich hier rumliegen, macht das Signal aber ganz eindeutig VIEL dünner...
Da ist das neue Soundsystem von Vista doch mal ein riesen Vorteil gegenüber XP; da will ich diesen Voteil doch auch Nutzen :)

Im Prinzip ist das ja keine schlechte Lösung mit dem Umschalten. Es sind nur leider ganze FÜNF Klicks statt nur einem... Und ich bin SOOO Faul ;)

Und: Ja Front Panel ist an Onboard angeschlossen weil 1. ist meine Audigy nur eine "Value" also keine internen Anschlüsse und 2. ist sie verdammt nochmal in Apfelschorle getränkt ;)



Und noch ein wenig OT: Wehe es kommt mir einer dass Onboard Sound doch gar nicht so schlecht sei... Sobald ich beim GuitarRig die Latency des Sounds unter 100ms stelle gibts nen BSOD :mad:
Mal ganz abgesehen davon kann mir keiner sagen, der auch nur ein mittelgutes System da stehen hat dass er keinen Unterschied zwischen Onboard und Audigy merkt. Da kriegt man ja das schaudern....
 
Du nutzt also 2 Wiedergabegeräte (Onboard und Karte), zwischen denen du umschältst?

Beim Ändern des Wiedergabegeräts wird ein Wert in der Registry geändert. Wenn du den findest kannst du beide Zustände exportieren und mit einer bat per reg add oder per Doppelklick auf die entsprechende .reg-Datei ändern.
Ich hatte den mal gefunden. Ich glaube ich hab damals die komplette Registry vor und nach der Umstellung exportiert und mit WinMerge verglichen. Aber ohne Gewähr, ist schon ne Weile her.

Die Alternative die ich inzwischen wählen würde ist, ein Autoit script für die Umstellung zu schreiben. So schalte ich z.B. immer meinen TV-Out ein bzw aus.

edit: ich hab mal ein Beispielscript erstellt. So würde es bei WinXP aussehen (Text hinter ";" = Kommentare):
Code:
;Soundeinstellungen aufrufen
Run("control mmsys.cpl")
;warten bis das Fenster geöffnet wurde
WinWaitActive("Eigenschaften von Sounds und Audiogeräte")
;zum Register Audio wechseln
Send("^{TAB 2}")
;Standardgerät für Soundwiedergabe auf das nächste in der Liste ändern
Send("{DOWN}")
;mit OK bestätigen
Send("{ENTER}")
;warten bis das Fenster geschlossen wurde
WinWaitClose("Eigenschaften von Anzeige")
;Script beenden
Exit
 
Zuletzt bearbeitet:
Das blöde ist nur, dass manchmal einfache Registry-Änderungen nicht reichen sondern sie durch einen API-Aufruf durchgeführt (bzw. aktualisiert) werden müssen, z.B. reicht es für die Icons auch nicht aus, einfach den Registry-Wert zu ändern, sondern man muss Windows auch mitteilen, dass es die Icons neu einlesen soll (oder einfach Ab- und Anmelden).

Die Idee mit dem Autoit-Script ist aber gar nicht so dumm - im Gegenteil sogar...
 
Das nenn ich doch mal kompetente Hilfe... Sehr schön!
Morgen setz ich mich dran

Danke


EDIT:

Code:
; Soundeinstellungen öffnen
Run, control mmsys.cpl
; Warten bis das Fenster aktiv ist
WinWaitActive, Sound, Die folgenden Audiowiedergabegeräte sind installiert:
; Vier mal Runter um auf den Headphones zu landen :)
Send, {DOWN 4}
; Dann einmal Tab um auf dem Button "Als Standard" zu landen
Send, {TAB}
; Enter drücken
Send, {ENTER}
; Und das Fenster mit OK schließen
Send, {TAB 2}{ENTER}

Code:
; Soundeinstellungen öffnen
Run, control mmsys.cpl
; Warten bis das Fenster aktiv ist
WinWaitActive, Sound, Die folgenden Audiowiedergabegeräte sind installiert:
; Drei mal Runter um auf den Speakers zu landen :)
Send, {DOWN 3}
; Dann Tab um auf dem Button "Als Standard" zu landen
Send, {TAB 2}
; Enter drücken
Send, {ENTER}
; Und das Fenster mit OK schließen
Send, {TAB 2}{ENTER}

Läuft...

Gibt es eine Möglichkeit nur ein Script "toogle.aut" zu erstellen? Ich find einfach keine Möglichkeit vorher zu testen welches Teil gerade verwendet wird...

Großartiges Progrämmchen das AutoIt... Warum kannte ich das bisher nicht?
 
Zuletzt bearbeitet:
Ich wüsste jetzt nicht, wie man den Status einer Auswahl (in dem Fall Kopfhörer oder Speaker) auslesen kann.

Du könntest es so lösen, dass du beim Umschalten auf Kopfhörer irgendwo auf der Festplatte eine Hilfsdatei anlegst und beim nächsten Aufruf des Scripts wird überprüft, ob die Datei da ist oder nicht und nach dem Umschalten auf Speaker wird die Datei gelöscht

Code:
#include <file.au3>

; Soundeinstellungen öffnen
Run("control mmsys.cpl")
; Warten bis das Fenster aktiv ist
WinWaitActive("Sound, Die folgenden Audiowiedergabegeräte sind installiert:")

if FileExists("HeadphonesOn") Then
	; Drei mal Runter um auf den Speakers zu landen :)
	Send("{DOWN 3}")
	FileDelete("HeadphonesOn")
Else
	; Vier mal Runter um auf den Headphones zu landen :)
	Send("{DOWN 4}")
	_FileCreate("HeadphonesOn")
EndIf

; Dann einmal Tab um auf dem Button "Als Standard" zu landen
Send("{TAB}")
; Enter drücken
Send("{ENTER}")
; Und das Fenster mit OK schließen
Send("{TAB 2}")
Send("{ENTER}")
Exit
 
Zuletzt bearbeitet:
Hi,

ich knabbere gerade am gleichen Problem, aber ich krieg's noch nicht hin.. Habe AutoIt installiert und eure Skripten ausprobiert, aber es klappt nicht. Ich benutze das Skript von DarkMole.

Ich glaube es liegt an der WinWaitActive Zeile, denn die Wiedergabegeräte Einstellungen öffnen sich, aber dann passiert nichts mehr.
Im Systray ist ein AutoIt Icon, das "Script paused" anzeigt, wenn man mit rechts draufklickt..


Und noch eine Frage, wo würde das eigentlich die Datei erstellen? In dem Ordner aus dem man es ausführt? Könnte man im Skript einen Pfad für die Datei angeben? So wie "C:\Sound\HeadphonesOn"?
 
Niemand?

Ich weiß, ist ein uralt Thread, aber ich finde nichts passenderes.. Keine Ideen? :(
 
Hallo also ich hab es geschaft meine datei sieht nun so aus

#include <file.au3>

; Soundeinstellungen öffnen
Run("control mmsys.cpl")
; Warten bis das Fenster aktiv ist
WinWaitActive("Eigenschaften von Sounds und Audiogeräte")

;zum Register Audio wechseln
Send("^{tab 2}")
Send("{down}")
if FileExists("C:\Headphones.txt") Then
FileDelete("C:\Headphones.txt")


Else
_FileCreate("C:\Headphones.txt")

EndIf

; Enter drücken
Send("{ENTER}")

if FileExists("C:\Headphones.txt") Then
MsgBox(4096, "Head", "Kopfhörer Aktiv", 5)

Else
MsgBox(4096, "Sourround", "Sorroundanlage Aktiv", 5)

EndIf

und kleiner tipp wenn beim "programmieren" das letzte Send("{ENTER}") einfach auskomentierts, (mit ; ) dann macht er es dir dein Soundmanager nicht zu, must aber vor dem nächsten versuch selber schleisen, da er sonst an der falschen stelle landet

Hoffe dieser text manchen weiter, denn der treat hat mir sehr geholfen
 
Zuletzt bearbeitet:
Da mir der Beitrag ebenso sehr geholfen hat, contribute ich auch gerne meinen Anteil:

Diesmal: Es geht um Bose Companion 4 unter Vista x64. Ich möchte umschalten können zwischen der Bose und meinen Kopfhörern.
In Vista heißt das entsprechende Fenster anders und man muss NICHT wie oben beschrieben mit STRG+Tab = ^TAB zu einer anderen Registerkarte navigieren, denn alles Wichtige findet sich gleich auf der ersten.

Hier der Code, viel Spaß damit :)

Code:
#include <file.au3>
;Soundeinstellungen aufrufen
Run("control mmsys.cpl")
;warten bis das Fenster geöffnet wurde
WinWaitActive("Sound")

; Auswahl von Bose oder SoundMAX
if FileExists("C:\Temp\BOSE_active.txt") Then
FileDelete("C:\Temp\BOSE_active.txt")
Send("{DOWN 3}")
Else 
_FileCreate("C:\Temp\BOSE_active.txt") 
Send("{DOWN 2}")
EndIf

; Zur Schaltfläche "Als Standard"
Send("{TAB 2}")
Send("{ENTER}")

; Und das Fenster mit OK schließen
Send("{TAB 2}")
Send("{ENTER}")

;warten bis das Fenster geschlossen wurde
WinWaitClose("Sound")
;Script beenden
Exit
 
Hi, Leute

ich habe heute mein Funkheadset HS-1200 von Creative (USB) bekommen.
Ich würde auch gerne automatisch umschalten.
Leider krieg ichs nichtmal manuell hin!
Ich benutze genanntes USB-Headset + Onboard Realtek Soundkarte +WinXP SP3 32Bit!

Systemsteuerung->Sounds und Audiogeräte->Audio->Realtek auswählen

Übernehmen.

Leider läuft der Sound auf nur auf dem Headset weiter.

Was mache ich falsch? oder spielt da eine der beiden Soundkarten nicht mit? oder gar mein Mediaplayer?

----

Hab grad was gemerkt!
Hab gerade umgestellt, jetzt kommt die musik aud dem Headset, und die windows sounds aus den Lautsprechern.
Wenn ich meinen mediaplayer neustarte kommt das ganze auch ausn lautsprechern.

Heißt das also, dass ich die Programme immer erst neustarten muss? Das wäre ja auch doof!
Kann ich nicht einfach einstellen dass beide soundkarten gleichzeitig benutzt werden? Also dass beide soundkarten den sound ausgeben. den eingang brauche ich dann nur beim headset. Dann kann ich einfach bei bedarf die boxen ein und ausschalten.
 

Anhänge

  • sound.jpg
    sound.jpg
    124,5 KB · Aufrufe: 1.569
Zuletzt bearbeitet:
DarkMole - ich will ein kind von dir!!

herzlichen dank, dass du mich auf das echt geile programm autoit gebracht hast - nicht nur das problem, um das es in diesem thread geht bzw ging, sondern auch viele weitere gehören mit hilfe dieses mächtigen tools nun der vergangenheit an.

da der gepostete code jedoch schon derartig veraltet ist, dass er mit der aktuellen autoit version (v3) gar nicht mehr funktioniert (weil sich die sytax geändert hat), möchte ich noch schnell für all jene meinen code posten, der genau das tut, worum es hier geht: das wiedergabegerät auf einfachstem und schnellstem weg switchen.

Code:
ShellExecute("mmsys.cpl")
WinWaitActive("Sound")
Send("{DOWN}{TAB}{TAB}{ENTER}{ENTER}")

funktioniert bei mir (win7) wunderbar. hier wird das 1. wiedergabegerät in der liste ausgewählt. wollt ihr das 2. in der liste auswählen, einfach ein {DOWN} hinzufügen usw.

lg
 
Hi,

Ich habe das thema nun auch gehabt und auch wenn der tread schon so alt ist würde ich gern eure meinung zu dem code denn ich geschrieben habe hören

if FileExists("C:\ausgabe\activ\headset.txt") Then

$var1 = MsgBox(36, "Standart Wiedergabegerät", "ist Headset. Auf Boxen umschalten?")

if $var1 = 6 Then
ShellExecute("mmsys.cpl")
WinWaitActive("Sound")
Sleep ("10")
Send("{DOWN}")
Sleep ("10")
Send("{DOWN}")
Sleep ("10")
FileMove("C:\ausgabe\activ\headset.txt", "C:\ausgabe\inactiv\headset.txt")
Sleep ("10")
Send ("{TAB}")
Sleep ("10")
Send ("{TAB}")
Sleep ("10")
Send ("{ENTER}")
Sleep ("10")
Send ("{ENTER}")
Sleep ("10")
MsgBox (64, "Boxen Aktiviert", "Die Boxen sind als Standart Wiedergabegerät definiert!!!", 2)
EndIf

if $var1 = 7 Then
MsgBox(64, "Headset Aktiviert", "Das Headset bleibt Standart Wiedergabegerät.")
EndIf

Else

$var2 = MsgBox(36, "Standart Wiedergabegerät", "ist Boxen. Auf Headset umschalten?")
if $var2 = 6 Then
ShellExecute("mmsys.cpl")
WinWaitActive("Sound")
Sleep ("10")
Send("{DOWN}")
Sleep ("10")
FileMove("C:\ausgabe\inactiv\headset.txt", "C:\ausgabe\activ\headset.txt")
Sleep ("10")
Send ("{TAB}")
Sleep ("10")
Send ("{TAB}")
Sleep ("10")
Send ("{ENTER}")
Sleep ("10")
Send ("{ENTER}")
MsgBox (64, "Headset Aktiviert", "Das Headset ist als Standart Wiedergabegerät definiert!!!", 2)
EndIf

if $var2 = 7 Then
MsgBox(64, "Boxen Aktiviert", "Die Boxen bleiben Standart Wiedergabegerät.")
EndIf

EndIf

Liebe Grüße Thooledo

edit: ist so mit das erste was ich geschrieben habe da ich erst vor 12 stunden angefangen hab mich einzuarbeiten
 
Zuletzt bearbeitet:
Vergesst die AutoIt Kacke.
Wieso Kacke?! Nur weil du damit nicht umgehen kannst?
AutoIt is genial! Damit kann man sich gerade bei bestimmten routinierten Aufgaben das Leben so viel leichter machen ...
Ich weiß, der Thread ist urrrrralt....
Alternative: http://code.google.com/p/audioswitch/
Gibt es wohl garnicht mehr.

Im Gegensatz zu dem AutoIt Script von DarkMole im Beitrag #10

Ich habe nun die Logitech G930 und da der Funkempfänger permanent eingestöpselt ist, kommt man nicht drum herum ständig zwischen Lautsprechern und Headset hin und her zu schalten.
Dem ist damit Abhilfe geschaffen!
Für Win10 muss man allerdings das Script ein kleines bisschen abändern:
Code:
#include <file.au3>

; Soundeinstellungen öffnen
Run("control mmsys.cpl")
; Warten bis das Fenster aktiv ist
WinWaitActive("Sound")

If FileExists("HeadphonesOn") Then
	; Vier mal Runter um auf den Lautsprecher zu landen
	; !!! Diese Einstellung selbst anpassen !!!
	Send("{DOWN 4}")
	FileDelete("HeadphonesOn")
Else
	; Ein mal Runter um auf den Headset zu landen
	; !!! Diese Einstellung selbst anpassen !!!
	Send("{DOWN 1}")
	_FileCreate("HeadphonesOn")
EndIf

; Dann zwei Tabs um auf dem Button "Als Standard" zu landen
Send("{TAB 2}")
; Enter drücken
Send("{ENTER}")
; Und das Fenster nach kurzer Pause mit OK schließen
Sleep(2000)
Send("{TAB 3}")
Send("{ENTER}")
Exit

Und schon läuft's!
 
Zurück
Oben