Sound Umschalten vor und nach einem Spiel

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Rainer B
Posts: 3
Joined: 06 Oct 2019, 13:11

Sound Umschalten vor und nach einem Spiel

06 Oct 2019, 13:28

Guten Tag in die Gemeinschaft, ich erbitte Eueren Rat.

Ich möchte mit einem Script meinen Rechner veranlassen eine bestimmte Soundausgabe zu erwingen, mein Kopfhörer, ein Spiel zu starten (Fortnite) und nach beenden des Spiels eine andere Soundausgabe erzwingen, meinen Verstärker - den ich regulär für alle anderen Anwendungen als Soundausgabe nutze. Neben diesen beiden ist noch ein anderes Gerät, ein UHD Tv im System den ich für Filme/Videos nutze. Der Kopfhörer ist am Monitor (ein Samsung) angeschlossen. Meine Soundkarte ist eine GTX 1060 6 GB, der Rechner ein Dell T5500 mit Xeon 5675 an Board. Die Basis meines scriptes habe ich von hier und dient dem Umschalten von Soundgeräten, funktionieren tut die erste Umschaltung auf Kopfhörer und das starten des Spieles (Fortnite), wenn ich Fortnite beende wird nicht auf den Verstärker umgeschaltet.

Sieht einer den Fehler?

Danke an alle die sich die Zeit nehmen um mir zu helfen
Rainer

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.

; C:\Program Files\Epic Games\Fortnite\FortniteGame\Binaries\Win64\FortniteClient-Win64-Shipping.exe
; C:\Program Files (x86)\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesLauncher.exe

; Soundausgabe auf headset routen (Headset an C23FG70 angeschlosssen) und anschließend zurück auf den Verstärker
; Weitere Soundgeräte im system sind TV (48UHD-LCD-TV) sowie Verstärker Pioneer (EP-HDMI-RX) 


MySoundGeraet = C24FG70


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


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	; Übereistimmung von Systemsound und gewünschte Ausgabe
			Break	; innere Schleife
		}
	If Gefunden
		Break	; äußere Schleife
}

ControlSend, SysListView321, {DOWN %GeraetNr%}, Sound
ControlSend, LButton, {Space}, Sound		; als Standardgerät
WinClose, Sound


; Fortnite Louncher (mein Spiel)

Run, C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Epic Games Launcher.lnk

; Fortnite nach dem spielen beenden ruft zunächst erneut den Louncher auf

Loop ; warten auf Louncher, bzw, bis dieser auch beendet ist
{
	
	
	#IfWinNotActive, Epic Games Launcher.lnk
		
	{
		
		MySoundGeraet = EP-HDMI-RX ; mein Standartausgabegerät für alles andere als das Spiel
		
		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
		
		
		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
		ExitApp
		
	}
		
}
[Mod edit: Topic ins deutschsprachige Forum verschoben.]
KHA
Posts: 232
Joined: 21 Aug 2018, 11:11

Re: Sound Umschalten vor und nach einem Spiel

06 Oct 2019, 16:27

Hallo,

ersetzt mal,

Code: Select all

#IfWinNotActive, Epic Games Launcher.lnk
durch:

Code: Select all

if !WinActive("Epic Games Launcher.lnk") 
gregster
Posts: 4921
Joined: 30 Sep 2013, 06:48

Re: Sound Umschalten vor und nach einem Spiel

06 Oct 2019, 16:37

Ich habe mir dein Skript noch nicht genauer angesehen, aber ich halte es für unwahrscheinlich (wenngleich möglich), dass dein Spiel bzw. der Launcher den wintitle Epic Games Launcher.lnk hat; insbesondere das .lnk kommt mir verdächtig vor.
Die Dateiendung lnk bezeichnet in der Regel eine Verknüpfung (in diesem Fall benutzt du diese wahrscheinlich zum Start des Launchers) - ich würde den Titel des Fensters, dessen Existenz du überwachen willst, nochmal mit dem Window Spy (im AHK-Verzeichnis) überprüfen, falls du das noch nicht getan hast.

Abgesehen davon hat KHA natürlich Recht, dass hier die von dir genutzte Direktive (beginnend mit #) nicht in Frage kommt - die wäre nur zur Erstellung kontext-sensitiver Hotkeys oder Hotstrings zu gebrauchen.
Rainer B
Posts: 3
Joined: 06 Oct 2019, 13:11

Re: Sound Umschalten vor und nach einem Spiel

07 Oct 2019, 11:32

Danke, ich habe eine Kombi aus beiden Antworten versucht ...

Code: Select all

if !WinActive("Epic Games Launcher.exe")
Der Effekt ist der gleiche, erste Umschaltung klappt prima, dann sieht es so aus das er nochmal umschalten will (die Auswahlliste der Soundgeräte geht kurz auf, schaltet aber nicht um), dann startet das Spiel problemlos mit Sound auf Kopfhörer. Nach beenden des Spieles tut sich nichts mehr. Meine Vermutung ist das das ganze script zu Beginn durchläuft und nicht auf das Spiel wartet.
gregster
Posts: 4921
Joined: 30 Sep 2013, 06:48

Re: Sound Umschalten vor und nach einem Spiel

08 Oct 2019, 01:17

Also du schaltest erst Audio um, startest dann das Spiel via Launcher, der Launcher schließt sich, dann beendest du das Spiel wieder, der Launcher kommt nochmal hoch - und dann willst du Audio zurückschalten.

Dann probier doch mal im Mittelteil:

Code: Select all

; [...] hier wurde Audio umgeschaltet
Run, C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Epic Games Launcher.lnk

; SetTitleMatchmode 2	; optional, je nach wintitle
Winwait Fortnite		; oder was auch immer der wintitle des Spiels ist
WinWaitClose Fortnite	; oder was auch immer der wintitle des Spiels ist

winwait ahk_exe Epic Games Launcher.exe
Winwaitclose ahk_exe Epic Games Launcher.exe

; jetzt schalten wir wieder um
MySoundGeraet = EP-HDMI-RX ; mein Standartausgabegerät für alles andere als das Spiel
		
Run, RunDll32.exe shell32.dll`,Control_RunDLL mmsys.cpl`,`,0
WinActivate, Sound
WinWaitActive, Sound,, 2
; [...] etc. pp
D.h. auch ohne Loop...
just me
Posts: 7224
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Sound Umschalten vor und nach einem Spiel

08 Oct 2019, 08:38

Neben allen anderen nützlichen Hinweisen solltest Du die Variable Gefunden vor den Schleifen, in denen sie verwendet wird, auf 0 setzen und außerdem nach Schleifenende prüfen, ob tatsächlich etwas gefunden wurde.
Rainer B
Posts: 3
Joined: 06 Oct 2019, 13:11

Re: Sound Umschalten vor und nach einem Spiel

21 Oct 2019, 16:57

Danke, grade angetestet - weiterhin funktioniert nur die erste Umschaltung, nach beenden des Spieles kommt vom script nichts mehr, und die soundkarte ist nicht umgestellt.
Ich habe jetzt einfach für die verschiedenen Anwendungen je eine Startdatei die jeweils auf die gewünschte Soundausgabe schaltet. Nicht ganz so elegant wie ursprünglich angedacht, aber funktioniert.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 5 guests