Bonjour à tous,
Je vais présenter la chose un peu différemment étant donné que j'ai résolu mon problème.
Donc pour être clair et concis, je veux palier au manque de musique dans emulationstation, en particulier lorsqu'on navigue dans son menu. Il va de soit que la musique doit se couper sitôt que l'on sort du front-end. Et pourquoi pas avec des commandes en batch. J'ai pu croiser pas mal de monde galérer sur ce problème, il y a bien une sorte de patch sur linux mais rien sous windows et tous les endroits ou j'ai pu jeter un oeil disaient que c’était plus ou moins impossible... Vous trouverez ci-après la solution dont il vous suffira d'adapter les quelques lignes de code à votre environnement.
Etude du cas, ce qu'il nous faut :
1 : définir si la fenêtre active est bien emulationstation.
2 : si oui, lancer une playlist si elle n'est pas déjà lancée, si non, arrêter la playlist et définir si emulationstation est toujours en marche.
3 : si emulationstation est toujours en marche, revenir a 1, si non, quitter.
Pour résoudre le problème de la fenêtre active, je suis passé par un script au3 (AutoIt) qui va m'inscrire dans un petit fichier ini le nom du programme actuellement au premier plan :
Vous trouverez facilement autoit que vous pouvez prendre en zip si vous n'aimez pas les installeurs. Apres quoi il faudra associer les fichiers d'extension au3 avec le logiciel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Global $vValue $winList = WinList() $sFilePath = "C:\Jeux\_Emulationstation\music.ini" $vValue = "none" CheckWindows($winList) Func CheckWindows($aArray) For $i = 1 To Ubound($aArray) - 1 If WinActive($aArray[$i][1]) Then $vValue = $aArray[$i][0] Next IniDelete($sFilePath, "Active Window", "Name") IniWrite($sFilePath, "Active Window", "Name", $vValue) EndFunc
Ce qui nous donne dans le fichier ini, si nous avons bien emulationstation en premier plan :
Si c'est un batch qui se trouve au premier plan nous aurons :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [Active Window] Name=EmulationStation
Et voici le batch qu'il faut lancer pour automatiser tout ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [Active Window] Name=C:\Windows\system32\cmd.exe
Avec le fatigue j'avais fait de grossières erreurs d'espace qui me vidaient mes variables. Maintenant tout marche correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 @echo off cd /d C:\ setlocal enabledelayedexpansion set Name="EmulationStation" set Music="0" set Active="1" set Value="null" :Loop1 if %Music% EQU "0" ( goto :Active1 ) if %Music% EQU "1" ( goto :Active2 ) :Active1 if %Active% EQU "1" ( goto :StartVlc ) if %Active% EQU "0" ( goto :Loop2 ) :Active2 if %Active% EQU "1" ( goto :Loop2 ) if %Active% EQU "0" ( goto :Loop2 ) :StartVlc CD "C:\Program Files (x86)\VideoLAN\VLC\" start /min vlc.exe --playlist-autostart --repeat --random --playlist-tree "C:\le chemin du dossier avec les musiques\music\" set Music="1" set Active="1" :Loop2 call "C:\Jeux\_Emulationstation\music.au3" timeout /t 1 /nobreak>nul for /f "delims== tokens=1,*" %%a in ('type "C:\Jeux\_Emulationstation\music.ini"') DO ( set Value=%%b ) if "%Value%" EQU %Name% ( set Active="1" goto :Loop1 ) if "%Value%" NEQ %Name% ( set Active="0" goto :CloseVlc ) :CloseVlc if %Music% EQU "0" goto :Bypass taskkill /im vlc.exe /f set Music="0" :Bypass timeout /t 2 /nobreak>nul cd /d C:\ tasklist /FI "IMAGENAME eq emulationstation.exe" 2>NUL | find /I /N "emulationstation.exe">NUL if "%ERRORLEVEL%" EQU "0" ( goto :Loop1 ) if "%ERRORLEVEL%" NEQ "0" ( exit )
Alors évidemment ce n'est pas très jojo mais en attendant ça fonctionne. Mais si quelqu'un pense a une méthode plus élégante je suis preneur.![]()
Partager