Post by Sora-MMK » 26 Feb 2018, 09:04
Hallo Community,
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
Ich habe bei
Code: Select all
; Das gewünschte Gerät eintragen:
; MySoundGeraet = Logitech G430 Gaming Headset
MySoundGeraet = Realtek High Definition Audio
Mein Headset eingetragen, was laut Windows nur als "Lautsprecher" erkannt wird. Habe hier auch High Definition Audio-Gerät ausprobiert, macht kein Unterschied. Sollte ich den Button nun drücken, wird auf headset gewechselt und bei erneutem drücken wieder auf meine Boxen. Erstmal gut.
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:
Code: 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
Danke und viel Erfolg
Lucky Joe
Hallo Community,
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]#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]
Ich habe bei
[code]; Das gewünschte Gerät eintragen:
; MySoundGeraet = Logitech G430 Gaming Headset
MySoundGeraet = Realtek High Definition Audio[/code]
Mein Headset eingetragen, was laut Windows nur als "Lautsprecher" erkannt wird. Habe hier auch High Definition Audio-Gerät ausprobiert, macht kein Unterschied. Sollte ich den Button nun drücken, wird auf headset gewechselt und bei erneutem drücken wieder auf meine Boxen. Erstmal gut.
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
[url=https://autohotkey.com:443/boards/viewtopic.php?p=143678#p143678]Betreff: Wiedergabegeräte wechseln[/url]
[quote="LuckyJoe"]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:
[code]
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[/code]
Danke und viel Erfolg
Lucky Joe[/quote]