Bin letztens auf den Thread "Wiedergabegeräte wechseln" und die Antwort von LuckyJoe gestoßen und wollte den, mittlerweile knapp ein Jahr alten Thread, nicht unbedingt ausgraben. Deswegen dachte ich erst, ich frage LuckyJoe einmal persönlich. Da er aber Arbeitstechnisch nicht viel zeit hat wende ich mich nun noch einmal an euch
Ich habe Versucht, das Script selber zu verstehen, um eventuell eine eigene Lösung dafür zu finden, aber Fehlanzeige.
Vorneweg (Und auch nur so taucht der Fehler erst auf), ich habe ein Programm gebastelt was mir vieles am PC leichter macht, z.B mit Buttons.
So habe ich auch dieses Script auf einen Button gelegt in meinem Programm.
Der relevante Scriptteil müsste wohl dieser sein:
Code: Select all
#SingleInstance Force
Gui +Caption
Gui, Font,
Gui, Add, Button, y130 x15 w190 h40 gAudio, Audio ;Bitte ignoriert die Formatierung, die gehört zum großen ganzen^^
Gui, Font, norm
Gui, Show,
return
Guiclose:
exitapp
Audio:
Run, RunDll32.exe shell32.dll`,Control_RunDLL mmsys.cpl`,`,0
WinActivate, Sound
WinWaitActive, Sound,, 2
if ErrorLevel
{
MsgBox, Sound Window nicht gefunden!
Return
}
Sleep 1000
; Das gewünschte Gerät eintragen:
MySoundGeraet = Lautsprecher
ControlGet, Liste, List,, SysListView321, Sound
Loop, Parse, Liste, `n
{
GeraetNr := A_Index
Loop, Parse, A_LoopField, %A_Tab%
If A_LoopField = %MySoundGeraet%
{
Geraet = %A_Index%
Gefunden = True
Break
}
If Gefunden
Break
}
ControlSend, SysListView321, {DOWN %GeraetNr%}, Sound
ControlSend, Button2, {Space}, Sound
WinClose, Sound
Return
Code: Select all
; Das gewünschte Gerät eintragen:
; MySoundGeraet = Logitech G430 Gaming Headset
MySoundGeraet = Realtek High Definition Audio
Bei jedem weiteren drücken des Buttons werden aber leider nur noch meine Boxen ausgewählt (die an erster Stelle sind).
Ich habe gelesen, dass im Originalscript nur das erste Gerät gefunden werden soll, aber nicht verstanden wie ich aus dieser Info nun erreiche dass es weiterhin hin und her wechselt.
Bei einem Neustart des Programms geht es direkt wieder einmalig, also denke ich es geht um eine Variable (A_Index?) die erst mit neustart resettet wird?
Ein weiteres Problem:
Wenn ich bei Programmstart bereits auf dem Headset bin, wählt er zuerst nochmal dieses aus und erst beim zweiten mal wählt es die Boxen aus (Und versteift sich dann auf diesen).
Und da das ja noch nicht genug geflenne ist, ist es möglich dass nur das Standartgerät und nicht das Standartkommunikationsgerät gewechselt wird? Das hätte ich gerne immer auf meinem headset, egal wo der andere Sound ist. =)
Ich hoffe mir kann da wer weiterhelfen =)
Grüße,
Sora-MMK
Betreff: Wiedergabegeräte wechseln
LuckyJoe wrote:Hallo
@just me: das ist ja wieder ein toller Ansatz. Ich habe ihn noch etwas ergänzt und erläutert. So kann ich jetzt bei mir z.B. zwischen Lautsprecher und Headset umschalten:
Danke und viel ErfolgCode: Select all
Run, RunDll32.exe shell32.dll`,Control_RunDLL mmsys.cpl`,`,0 WinActivate, Sound WinWaitActive, Sound,, 2 if ErrorLevel { MsgBox, Sound Window nicht gefunden! Return } Sleep 1000 ; Das gewünschte Gerät eintragen: ; MySoundGeraet = Logitech G430 Gaming Headset MySoundGeraet = Realtek High Definition Audio ; Für das Weitere: Hilfe lesen zu: ; ControlGet, AusgabeVar, List, Optionen, SysListView321, Fenstertitel, Fenstertext ; ... so kann man sich z.B. die einzelnen Zeilen zu jedem Gerät ausgeben: ; ControlGet, Liste, List,, SysListView321, Sound ; Loop, Parse, Liste, `n ; alle Geräte sind durch Zeilenvorschübe (`n) abgegrenzt ; { ; GeraetNr := A_Index ; Loop, Parse, A_LoopField, %A_Tab% ; die Zeilen jedes Gerätes sind durch Tabulatoren (A_Tab) abgegrenzt! ; MsgBox Gerät-Nr. %GeraetNr%, Zeile %A_Index%: %A_LoopField% ; } ; Return ControlGet, Liste, List,, SysListView321, Sound Loop, Parse, Liste, `n ; alle Geräte sind durch Zeilenvorschübe (`n) abgegrenzt { GeraetNr := A_Index Loop, Parse, A_LoopField, %A_Tab% ;die Zeilen jedes Gerätes sind durch Tabulatoren (A_Tab) abgegrenzt! If A_LoopField = %MySoundGeraet% { Geraet = %A_Index% Gefunden = True ; es soll (bei mir) nur das erste Gerät gefunden werden Break ; innere Schleife } If Gefunden Break ; äußere Schleife } ControlSend, SysListView321, {DOWN %GeraetNr%}, Sound ControlSend, Button2, {Space}, Sound ; Space "klickt" bei mir auf "als Standardgerät" WinClose, Sound
Lucky Joe