Leserartikel Schneller Soundgerätewechsel mit AutoIt

Kingfisher OK

Rear Admiral
Registriert
Dez. 2007
Beiträge
5.160
Die Idee und Initiative dieser FAQ gilt dem User I N X S. Vielen Dank für eine sehr tolle Grundlage/Einführung in das Programm

Übersicht:

FAQ:

Servus,

wollte nur mal mein Wissen mit euch teilen, da ich ewig lang nach einem Tool gesucht habe, bei dem man in kürzester Zeit sein Standard Wiedergabegerät (Gerät auf dem standardmäßig alle Audiosignale wiedergegeben werden) wechseln kann.

Hintergrund ist, dass ich mein PC-Lautsprechersystem über Klinke angeschlossen habe, meine Hifi Anlage digital über SPDIF und mein Headset ist über meine Logitech G110 angeschlossen.

Dementsprechend werden alle 3 Wiedergabegeräte einzeln im Soundmenü angezeigt:

soundqe42.png
<-- Von oben nach unten -> Lautsprecher, HiFi-Anlage, Headset


Das Problem Nr 1:


Ist es beispielsweise Abends, möchte ich über die Kopfhörer hören. Um dazu nicht jedesmal die Soundeinstellungen öffnen zu müssen, muss eine automatisierte Lösung zum Wechseln her.
Neben Vista Audiochanger gibt es noch viele weitere Alternativprogramme, die mir aber leider allesamt nicht zugesagt haben.
Also musste eine andere Lösung her.

Die Idee:

Man erstellt ein Makro ==> Eine fest vorgegebene Abfolge mehrerer "Arbeitsschritte" die der Computer ausführt

Wenn man das Soundgeräte Fenster geöffnet hat, lassen sich die notwendigen Schritte alle per Tastatur ausführen. Möchte man zum Beispiel das Spdif Gerät auswählen, muss man zwei mal die Pfeiltaste [nach unten] drücken, den Knopf "Als Standard" kann man per [Tab] anwählen - die perfekte Vorraussetzung um ein Makro zu schreiben.

Dieses Makro muss dann nur noch als ausführbare Datei (.exe) gespeichert werden, und der Soundgerätewechsel erfolgt komplett automatisch.

Ich überlegte also, mit welchem Programm ich so ein Makro schreiben kann.


Die Lösung:

Nach einer Suche im Internet stieß ich auf folgendes Programm:
AutoIt


AutoIt kann z.b. Tastendrücke simulieren oder bestimmte Schaltflächen nach ihrem Status abfragen usw.


Das Problem Nr. 2:

Wie bei vielen Programmen, gibt es auch in den Soundeinstellungen das Problem der grau hinterlegten Schaltflächen. Diese lassen sich unter bestimmten Bedingungen nicht anklicken. Warum das ein Problem darstellt, versuche ich anhand des folgenden Beispiels zu erklären:
Um von einer Schaltfläche hier auf "Als Standard" zu kommen muss 2 mal die [TAB] Taste gedrückt werden. Die Markierung springt dann von "Konfigurieren" auf "Als Standard" - perfekt.

schaltfchen-whlbarna5a.jpg


Doch ist jetzt die Schaltfläche "Als Standard" grau hinterlegt, Springt die Markierung von "Konfigurieren" auf "Eigenschaften". Da das Makro als nächsten Schritt die [ENTER] Taste drücken wird, würden wir bei den Eigenschaften landen - schlecht.


schaltfchen-nichtwhlba2yo6.jpg


Um solchen unvorhersehbaren Konstellationen entgegenzuwirken, muss irgendwie geprüft werden ob der Button "Als Standard" aktiv ist. Gleiches gilt natürlich für die Schaltfläche "Konfigurieren".



Die Entwicklung des Makros:


Die ersten Codezeilen sind recht einfach.
Als erstes müssen die Soundeinstellungen geladen werden und warten bis diese geöffnet sind:

Code:
Run("c:\windows\system32\control.exe mmsys.cpl")
WinWaitActive("Sound")
Dann schicken wir eine beliebige Anzahl an "Pfeiltaste nach unten" um zu unserem gewünschten Wiedergabegerät zu navigieren. Für mich entspricht das genau einmal [DOWN], da das Wiedergabegerät an oberster Stelle steht:
Code:
send("{DOWN}")
So jetzt müssten wir prüfen, ob das Feld "Konfigurieren" aktiv ist. Das könnte man mit einer "If Abfrage" machen. Die Funktion dazu heisst "ControlEnable"

Nur wie fragen wir den Button genau ab?
Dazu gibt es ein kleines Tool namens "WindowInfo" - zu finden im Installations Ordner (Bei Windows 7: C:\Program Files (x86)\AutoIt3\Au3Info.exe)


windowtool1tcw9.png



Um die ID der entsprechenden Schaltfläche herauszufinden, klicken wir unter "Finder Tool" auf das Fadenkreuz und ziehen es auf den entsprechenden Button ("Konfigurieren"). Hier lassen sich jetzt einige Informationen entnehmen, unter anderem auch die Button-ID

windowstool2si37.png



Um die ID zu entnehmen müssen wir folgendes anklicken:
Registerkarte "Control" --> 6. von oben ist die ID
Wir sehen, die ID ist 1001. Die Schaltfläche "Als Standard" hat hingegen die ID 1002, überrascht? ;)


Die fertigen Schritte in der Übersicht:

  • Soundfenster wird geöffnet
  • PC wartet, bis das Fenster offen ist
  • Pfeiltaste [NACH UNTEN] wird gedrückt
  • wir lassen prüfen, ob der Button "Konfigurieren" aktiv ist
    • wenn ja: [TAB] wird gesendet
  • wir lassen prüfen, ob der Button "Als Standard" aktiv ist
    • wenn ja: [TAB] + [ENTER] wird gesendet
  • Fenster wird geschloßen
Wir fragen ab, ob der Button "Konfigurieren" aktiv ist, wenn ja, dann wird ein Tab gesendet um ihn zu markieren.
Code:
if ControlEnable("Sound", "", 1001) Then
    send("{TAB}")
EndIf
So und das gleiche nochmal für den Button "Als Standard". Wenn der Knopf aktiv ist, und das angewählte Soundgerät nicht schon das Standardgerät ist, werden 2 weitere Befehle gesendet: TAB und ENTER:
Code:
if ControlEnable("Sound", "", 1002) Then
    Send("{TAB}")
    Send("{ENTER}")
EndIf
Letztendlich wird das Fenster geschloßen
Code:
WinClose("Sound")
Damit haben wir alle Schritte in unserem Makro gespeichert. Ich habe den vollständigen Code noch einmal hier unten notiert:

Code:
Run("c:\windows\system32\control.exe mmsys.cpl")

WinWaitActive("Sound")

send("{DOWN}")

if ControlEnable("Sound", "", 1001) Then
    send("{TAB}")
EndIf



if ControlEnable("Sound", "", 1002) Then
    Send("{TAB}")
    Send("{ENTER}")
EndIf

WinClose("Sound")
Die ganze Vorgehensweise könnt ihr für weitere Soundgeräte wiederholen und als einzelne Makros abspeichern (wie man nun ausführbare .exe Dateien erstellt, lest ihr am besten unten bei "Ergänzungen").

Wenn ihr Anfragen nach individuellen Scripts habt, euch aber nicht zutraut sowas selbst zu schreiben, dann nehme ich das gerne als Herausforderung!


Ergänzungen

Wie oben schon beschrieben, sollte die Datei für eine einwandfreie Funktion als .exe gespeichert werden, damit diese als eigenständiges Programm arbeiten kann und nicht zusätzlich das Öffnen des AutoIt Editors benötigt --> Zeit- und Resourcenersparnis.

Um eine fertig programmierte .au3 Datei in eine .exe Datei zu wandeln, muss in der Programierebene von AutoIt nur [F7] gedrückt werden. Eine ausführbare Exe wird im selben Ordner gespeichert, in welchem sich auch die .au3 Datei befindet.

Zusätzlich empfiehlt es sich, alle Dateien in einem Ordner abzuspeichern, ich nannte diesen "Soundeinstellungen":

Ordner - Soundeinstellungen.JPG
Wenn in diesem Ordner dann die .exe Datei erstellt wurde, kann man per rechter Maustaste --> Senden an --> Desktop eine Verknüpfung auf dem Desktop erstellen, was natürlich nicht zwingend notwendig ist:

2.jpg


Um nun eine Tastenkombination für ein Profil zu erstellen, wählt man rechte Maustaste --> Einstellungen auf die Verknüpfung:

Eigenschaften - 2.1 Stereo.jpg

In dem geöffneten Fenster kann nun einmal die gewünschte Tastenkombination eingegeben werden, sowie ein eigenes Icon gewählt werden, um das Shortcut optisch aufzuwerten:

Eigenschaften.JPG


Wer allerdings seine Verknüpfung mit einem .jpeg, .png etc. Foto aufwerten möchte, wird feststellen, dass die genannten Dateiformate nicht kompatibel sind.
Auf dieser Seite ist es möglich, seine Lieblingsfotos in eine .ico Datei wandeln zu lassen.

Fertiggestellt sieht das dann so aus:

schaltflaechen-jpg.215922

Über den Logitech Makro Manager, kann man nun die "G-Tasten" mit den zuvor festgelegten Tastenkombinationen belegen und bennenen.

Gruß

Kingfisher OK
 

Anhänge

  • Schaltfächen - nicht wählbar.JPG
    Schaltfächen - nicht wählbar.JPG
    14,2 KB · Aufrufe: 2.587
  • Schaltfächen - Wählbar.JPG
    Schaltfächen - Wählbar.JPG
    15,7 KB · Aufrufe: 2.945
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: NotCompatible
AW: [How To] Schneller Soundgerätewechsel mit AutoIt

Dank dem User Haldi, der die Idee mit einem

Code:
ControlClick("Sound", "Als Standard", 1002)

Befehl hatte, hat der User nixdagibts einen Code erstellt, der es ermöglicht mit einer einzigen ausführbaren Datei nacheinander zwischen den einzelnen Soundgeräten zu wechseln.

PHP:
Run("c:\windows\system32\control.exe mmsys.cpl")

WinWaitActive("Sound")

send("{DOWN}")
send("{DOWN}")

if ControlCommand("Sound", "", 1002, 'IsEnabled') Then
	ControlClick("Sound", "Als Standard", 1002)
else
	send("{DOWN}")
    ControlClick("Sound", "Als Standard", 1002)
EndIf

WinClose("Sound")

Die .exe Datei wird nach dem oben genannten Verfahren erstellt.

Vielen Dank dafür!
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: NotCompatible
Danke! Wird probiert.
 
Zuletzt bearbeitet von einem Moderator:
AW: [Tutorial] Standard Audiogerät wechseln mit AutoIt

Gerne ;) sag was bei rausgekommen ist!
 
AW: [Diskussion][Tutorial] Standard Audiogerät wechseln mit AutoIt

Sehr sehr sehr schön :)

Sehr gute Arbeit! weiter so, hat mir extrem geholfen :)

Gruß! Danke!

EDIT.:

Ich bräuchte noch einen Script um zwischen 5.1, Stereo und eventuell 7.1 Wechseln zu können.

Zur Einstellung komme ich über:

Wiedergabegeräte --> [rechte Maustaste auf Audiogerät] --> Lautsprecher konfigurieren --> [2mal down für 5.1] --> [2mal Tab für weiter] --> Enter --> Enter --> Enter --> Enter --> wiedergabegeräte [close]

Probleme hierbei:

1. Wenn das Audiogerät nicht angeschloßen ist, kann man den Button "Lautsprecher konfigurieren" natürlich nicht anwählen.
2. Um von 5.1 wieder auf Stereo zu wechseln muss beim 4ten Schritt 2mal nach oben gedrückt werden für Stereo, wenn vorher 5.1 ausgewählt war. Sollte man aber ausversehen noch einmal auf die 5.1 Exe drücken würde bei bereits eingestelltem 5.1 das 7.1 Setup aufgerufen werden.


Für das zweite Problem habe ich aber schon eine Lösung:

Bei Schritt 4 muss einfach mindestens 4 mal die Pfeiltaste [nach oben] gedrückt werden, damit sichergestellt ist, dass das Stereo Setup ausgewählt ist. Dannach können je 2 mal down für 5.1 und 3 mal down für 7.1 und 0 mal down für Stereo ausgewählt werden.

Das erste Problem kann mit deinem "if enabled" Befehl gelöst werden, den ich aber noch nicht ganz durchblickt habe.

Ein paar Screenshots folgen gleich.

Gruß

EDIT.:

1.JPG

Wenn angeschloßen: und wenn nicht:
2a.jpg2b.jpg

Dann die Einzelschritt fürs 5.1 Setup:
3 5.1.JPG4 5.1.JPG5 5.1.JPG6 5.1.JPG

Und für das Stereo Setup:

3 Stereo.JPG4 Stereo.JPG5 Stereo.JPG

Für das 7.1 Setup verhält es sich ähnlich wie für das 5.1 Setup nur muss 3 mal [Pfeiltaste nach unten] gewählt werden.

Vielen Dank im Vorraus :)
 
Zuletzt bearbeitet:
AW: [Diskussion][Tutorial] Standard Audiogerät wechseln mit AutoIt

Huhu,

freut mich, dass mal Feedback kommt :D Dachte schon keinen Interessiert meine Tut ;)

Also, ich kann das gerne für dich basteln, aber macht natürlich mehr Spaß, wenn ich dir nur ein bisschen unter die arme greife.

Prinzipiell beachten musst du folgendes:
- Wenn du ein neues Fenster öffnest, musst du immer erst warten bis es auch wirklich geöffnet ist. z.B. mit WinWaitActive. Dann kannst du erst mit den Befehlen weitermachen.

- Der Befehl ControlEnable gibt einen Bool wert zurück, der sich auf das Aktuelle Fenster und eine SteuerID bezieht.

Code:
if ControlEnable("Sound", "", 1001) Then

Sound ist der Fenstername, wenn es ein neues Fenster ist, muss auch der name angepasst werden. Alternativ kannst du auch die fensterid nehmen mit dem ID Finder.
Die Steuerelement ID findest du genauso raus.

Ich hoffe ich konnte dir damit erstmal helfen und bedanke mich für das Interesse an meinem Tutorial :)
 
AW: [Diskussion][Tutorial] Standard Audiogerät wechseln mit AutoIt

Jupp schonmal weitergeholfen :)

Wie kann ich [rechte Maustaste] auf ein Objekt anwenden?

Gruß

EDIT.:

hab es in der Help gefunden:

MouseClick ( "button" [, x, y [, clicks [, speed ]]] )

EDIT2.:

Das mit der Window Info funktioniert aber leider nicht, wenn ich ein Feld suche, welches ich mit der rechten Maustaste anwählen kann... Also ich brauch einen If Befehl für das Indexmenü

EDIT3.:

habe einen Trick gefunden wie ich die Maus gar nicht verwenden muss, ist nämlich doch etwas komplizierter ;)
 
Zuletzt bearbeitet:
AW: [Diskussion][Tutorial] Standard Audiogerät wechseln mit AutoIt

Ja ich würde dir auch nicht zur maus raten, das ist nicht "universell" genug ;)

Halt mich auf dem laufenden.
 
AW: [Diskussion][Tutorial] Standard Audiogerät wechseln mit AutoIt

Jap läuft jetzt, Konfiguration für den wechsel zwischen Kopfhörer und Denon AVR klappt wunderbar, der wechsel zwischen Stereo, 5.1 und 7.1 auch einwandfrei!

Danke schonmal, noch ein paar Screenshots:

Schaltflächen.JPGG15.JPG

Wer die .ico Dateien für 2.1 5.1 und 7.1 haben möchte, kann sich einfach bei mir melden ;)

Gruß

PS.:

@I N X S

du könntest noch hinzufügen, dass es Komplikationen mit den Makros geben kann, wenn man sie aus dem Windows Explorer per Doppelklick startet.

Ich habe die ganzen .exen und andere Dateien in einem Ordner gespeichert, wenn ich dort auf eine exe Doppelklicke, funktioniert das Makro nicht, und der Windows Explorer schließt sich. Also immer über eine Verknüpfung starten.
 
AW: [Diskussion][Tutorial] Standard Audiogerät wechseln mit AutoIt

Danke für die Tipps, sowas habe ich schon lange gesucht, da mein Logitech G35 USB-Headset da etwas unkooperativ war.
Die Sachen auf die Makrotasten der Logitech G15 ist auch ne klasse Idee.

Ein kleinen kleinen Fehler, den ich mir nicht erklären kann habe ich noch:
Wenn ich die au3-Dateien vom Desktop in einen Ordner auf dem Desktop verschiebe, öffnet das Tool nur das Soundmenü, macht danach aber nichts mehr.
Hat da jemand eine Idee?
 
AW: [Diskussion][Tutorial] Standard Audiogerät wechseln mit AutoIt

Hättest du etwas dagegen, wenn ich deine tollen ausführungen in mein Tut einbaue, oder du es selbst einbaust?

Ist nämlich echt eine tolle und hilfreiche ergänzung.
 
AW: [Diskussion][Tutorial] Standard Audiogerät wechseln mit AutoIt

Nope einbauen darfst es selber ;) Ich kann dir aber den BB-Code schicken.

Gruß

EDIT.:

Das How To erfährt morgen eine Überarbeitung ;)

EDIT2.:

Komplett überarbeitet, viel Spaß :)
 
Zuletzt bearbeitet:
AW: [Diskussion][How To] Schneller Soundgerätewechsel mit AutoIt

Hallo Kingfisher OK,

DANKE für das Tutorial, habe so etwas schon einmal in diesem Thread hier (vgl. hier) gesucht - aber leider nie eine Lösung gefunden. Mit deiner Lösung kommt man dem doch schon sehr nah.

Eine Frage hätte ich aber noch - lässt es sich damit auch irgendwie realisieren einen Bildschirm auf Knopfdruck zu aktivieren oder zu deaktivieren? (Mein LCD hängt per HDMI am PC, dieser soll aber nur dann aktiviert sein, wenn ich Filme schauen möchte)

Danke schon einmal für deine Hilfe.

VG Max
 
AW: [Diskussion][How To] Schneller Soundgerätewechsel mit AutoIt

Als Betriebssystem verwende ich MS Windows 7 Home Premium.
Es gibt im Grunde zwei Möglichkeiten den dritten Bildschirm zu aktivieren bzw. zu deaktivieren:

1 - Recktsklick auf den Desktop --> Bildschrimauflösung --> deaktivierten Monitor mit Klick auswählen ---> im Dropdown-Menü "Desktop auf diese Anzeige erweitern" auswählen ---> mit OK bestätigen ---> 10s warten ---> in der Abfrage "Änderungen beibehalten" auswählen ---> FERTIG:



image1-jpg.223228



image15-jpg.223229



image20-jpg.223230




2 - Den Rechtsklick auf dem Desktop kann mal über die Systemsteuerung umgehen:
Start ---> Systemsteuerung ---> Darstellung und Anpassung ---> ENTWEDER "Bildschirmauflösung anpassen" ODER "An einen externen Bildschirm anschließen" (führt beides zu dem zweiten Bild.) ---> dann wie gehabt, deaktivierten Monitor mit Linksklick auswählen ---> im Dropdown-Menu ...etc.

Ich hoffe, dass man da was machen kann?!

DANKE schon einmal und VG
 

Anhänge

  • Image1.jpg
    Image1.jpg
    63,5 KB · Aufrufe: 6.383
  • Image15.jpg
    Image15.jpg
    113,5 KB · Aufrufe: 6.565
  • Image20.jpg
    Image20.jpg
    127 KB · Aufrufe: 6.359
AW: [Diskussion][How To] Schneller Soundgerätewechsel mit AutoIt

Hallo,

habe gleich einen Code bereit ;)

Gruß

EDIT.:

Code:
Run("c:\windows\system32\control.exe")

WinWaitActive("Alle Systemsteuerungselemente")

Send("{right}")
Send("{right}")
Send("{enter}")
WinWaitActive("Anzeige")
Send("{Tab}")
Send("{Tab}")
Send("{Tab}")
Send("{Tab}")
Send("{Enter}")
WinWaitActive("Bildschirmauflösung")
Send("{1}")
Send("{Tab}")
Send("{Tab}")
Send("{Tab}")
Send("{Tab}")
Send("{alt down}")
Send("{down}")
Send("{down}")
Send("{down}")
Send("{down}")
Send("{up}")
Send("{enter}")
sleep(10000)
Send("{left}")
Send("{enter}")

WinClose("Bildschirmauflösung")

In der Art und weise kannst du es machen, musst wahrscheinlich selber noch etwas rumspielen damit...

Gruß
 
Zuletzt bearbeitet:
AW: [Diskussion][How To] Schneller Soundgerätewechsel mit AutoIt

edit
 
Zuletzt bearbeitet:
AW: [Diskussion][How To] Schneller Soundgerätewechsel mit AutoIt

Hier mein Script um mit einem Icon zwischen 2 bestimmten Audioquellen hin- und her zu wechseln:

Code:
Run("c:\windows\system32\control.exe mmsys.cpl")

WinWaitActive("Sound")

send("{DOWN}")
send("{DOWN}")

if [B]ControlCommand[/B]("Sound", "", 1002, '[B]IsEnabled[/B]') Then
    Send("{TAB}")
    Send("{TAB}")
    Send("{ENTER}")
else
    Send("{DOWN}")
    Send("{TAB}")
    Send("{TAB}")
    Send("{ENTER}")
EndIf

WinClose("Sound")

Der Vorteil ist, das man nicht für jedes Gerät ein extra AutoIt Programm schreiben muss.
Denn man kann dieses hier beliebig erweitern, so dass zwischen 3 und mehr Geräten durch gewechselt wird.
 
Zuletzt bearbeitet:
AW: [Diskussion][How To] Schneller Soundgerätewechsel mit AutoIt

nixdagibts schrieb:
...
if ControlCommand("Sound", "", 1002, 'IsEnabled') Then
...

danke, mit dieser zeile hast du mein problem gelöst - anders wollte if-else net laufen. unlogischerweise läuft das ganze auch ohne diesen parameter wenn man, wie auch im code des howto-threads, nur mit if arbeitet.
 
Zuletzt bearbeitet:
AW: [Diskussion][How To] Schneller Soundgerätewechsel mit AutoIt

Hmm habe beim erstellen des Tuts noch nicht sooo den plan von AutoIt gehabt. Hab mir genau die Befehle, die ich gebraucht habe rausgesucht :D
 
Zurück
Oben