Page 1 sur 2
[R] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 19:34
par Utilisateur 2008 supprimé
Bonjour à tous,
J'aurais besoin d'un script qui quand je lance par exemple un jeu, il me lance un logiciel qui me permet d'y jouer à la manette.
En gros il faudrait que quand je lance un programme, il me lance un autre programme en même temps.
Je sais que pour certains ce script peut paraître simple à faire mais pour moi qui n'y connait pas grand chose c'est assez difficile.
Merci d'avance.
Edit : J'avais essayé ça mais ça ne correspond pas vraiment à ce que je voudrais faire.
Code : Tout sélectionner
if run("C:\Program Files\XBMC\XBMC.exe") Then
Run("C:\Documents and Settings\PimOoze\Bureau\xpadder_gamepad_profiler\Xpadder.exe")
EndIf
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 19:40
par timmalos
Ce genre de script doit tourner en permanence sur ta machine.
En gros, une boucle infinie, tu sleep, et tu check si un process (celui qui t'interesse existe)
Code : Tout sélectionner
While 1
Sleep(1000)
If ProcessExist("explorer.exe") then
Run("iexplore.exe")
While ProcessExist("explorer.exe")
Sleep(500)
WEnd
EndIf
WEnd
Sinon le plus simple serait de remplacer le programme.
En gros, si tu veux faire qu'à chaque lancement de Internet Explorer tu lance firefox aussi (exemple)
Tu va dans le dossier D'Internet Explorer et tu renomme iexplore en iexplore2
tu creer un fichier .exe que tu renomme en iexplore.exe.
Tu rentre dedans
Et le tour est joué.
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 20:11
par Utilisateur 2008 supprimé
Merci de ta réponse rapide.
Je vais tester tout ça.
Edit : Parfait c'est exactement ce que je voulais.
Je me suis servi de ton premier code. Par contre tu avais oublié de mettre des "s" à ProcessExist
s
Merci encore.

Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 20:29
par Utilisateur 2008 supprimé
Autre petite question.
Comment je pourrais faire pour que quand je quitte le premier programme, l'autre programme s'arrête.
J'ai essayé de reprendre le même code en changeant quelques trucs mais ça ne fonctionne pas.
Code : Tout sélectionner
While 1
Sleep(1000)
If ProcessClose("XBMC.exe") then
exit("C:\Documents and Settings\PimOoze\Bureau\xpadder_gamepad_profiler\Xpadder.exe")
While ProcessClose("XBMC.exe")
Sleep(500)
WEnd
EndIf
WEnd
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 20:43
par Iste
Code : Tout sélectionner
While 1
Sleep(1000)
If ProcessExists("explorer.exe") Then
Run("iexplore.exe")
While ProcessExists("explorer.exe")
Sleep(500)
WEnd
ProcessClose("iexplore.exe") ;Ici , fermer le second programme
EndIf
WEnd
Le code de timmalos est bien pensé, car tant que le 1er programme est lancé, le script ne cherche plus a ouvrir le second.
Il reste bloqué dans une "mini boucle", a la sorti de celle ci, cest donc que le 1er programme est fermé, on ferme donc aussi l'autre
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 20:57
par Utilisateur 2008 supprimé
Parfait ça marche très bien.
Merci beaucoup à vous deux pour votre efficacité et votre rapidité.

Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 21:24
par Utilisateur 2008 supprimé
J'ai encore besoin de votre lumière
Si je veux partir sur le même principe de, quand je lance un programme, il m'en exécute un autre mais que je veux répéter l'opération plusieurs fois pour d'autres logiciels, est-ce qu'il est possible de tout mettre dans le même script ou alors je dois créer un script pour chaque ensemble de 2 logiciels?
Je sais pas si c'est assez clair.
Je poste un code faux qui vous donnera une idée sur ce que je souhaiterais faire :
Code : Tout sélectionner
;Script pour XBMC
While 1
Sleep(1000)
If ProcessExists("XBMC.exe") Then
ShellExecute("C:\Documents and Settings\PimOoze\Bureau\xpadder_gamepad_profiler\XBMC.xpadderprofile")
While ProcessExists("XBMC.exe")
Sleep(500)
WEnd
ProcessClose("Xpadder.exe")
EndIf
WEnd
;Script pour Mirror's Edge
While 2
Sleep(1000)
If ProcessExists("MirrorsEdge.exe") Then
ShellExecute("C:\Documents and Settings\PimOoze\Bureau\xpadder_gamepad_profiler\Mirror's Edge.xpadderprofile")
While ProcessExists("MirrorsEdge.exe")
Sleep(500)
WEnd
EndIf
WEnd
Re: [R] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 22:01
par Iste
hum.... Moui, c'est surement possible avec un seul, mais honnêtement, je pense que le plus simple, c'est de lancer plusieurs script !
Pas forcément d'en créer plusieurs, je m'exemple
Code : Tout sélectionner
;On écrit le 1er script
$script = "While 1" & @CRLF _
&" Sleep(1000)" & @CRLF _
&' If ProcessExists("explorer.exe") Then' & @CRLF _
&' Run("iexplore.exe")' & @CRLF _
&' While ProcessExists("explorer.exe")' & @CRLF _
&" Sleep(500)" & @CRLF _
&" WEnd" & @CRLF _
&' ProcessClose("iexplore.exe")' & @CRLF _
&" EndIf" & @CRLF _
&"WEnd"
;et on le lance !
If FileExists(@TempDir & "\script1") Then FileDelete(@TempDir & "\script1")
FileWrite(@TempDir & "\script1",$script)
Run(@AutoItExe & ' /AutoIt3ExecuteScript '& @TempDir & "\script1")
;on écrit le second
$script = "While 1" & @CRLF _
&" Sleep(1000)" & @CRLF _
&' If ProcessExists("autre.exe") Then' & @CRLF _
&' Run("iautre.exe")' & @CRLF _
&' While ProcessExists("autre.exe")' & @CRLF _
&" Sleep(500)" & @CRLF _
&" WEnd" & @CRLF _
&' ProcessClose("iautre.exe")' & @CRLF _
&" EndIf" & @CRLF _
&"WEnd"
;et on le lance aussi !
If FileExists(@TempDir & "\script2") Then FileDelete(@TempDir & "\script2")
FileWrite(@TempDir & "\script2",$script)
Run(@AutoItExe & ' /AutoIt3ExecuteScript '& @TempDir & "\script2")
Ceci devrait créer automatiquement d'autre script indépendant. C'est peut etre pas la meilleur solution, mais ca évite de lancer des script un a un. Pis c'est tellement plus simple !

Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 31 août 2009 22:25
par Utilisateur 2008 supprimé
Encore une fois merci.
Mais avec cette méthode, est-ce qu'il y a moyen de fermer par exemple le script 2 sans fermer le script 1 et vice versa une fois que j'ai quitté un programme.
Re: [R] Exécuter un programme lorsque j'en lance un autre
Posté : mar. 01 sept. 2009 16:37
par Iste
Le programme ci dessus se lance, lance les autres, et se ferme. Apres les différent process vont tourner de manière indépendantes (tu véras d'ailleur plein d'icone autoit dans la barre des taches si tu le laisse comme ca

)
Par contre, pas moyen de les différencier dans le gestionnaire des taches :s, il faudra donc penser a une façon de les gérer mieux
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 00:21
par Utilisateur 2008 supprimé
C'est encore moi
Voilà, je me sers beaucoup de ce script et avec cette technique, j'ai beaucoup trop d'icônes dans mon systray...
Je voulais savoir s'il était possible de tout mettre dans un même script au lieu de m'ouvrir plusieurs scripts à chaque fois.
Merci d'avance.

Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 10:43
par pop45
PimOoze a écrit :J'ai encore besoin de votre lumière
Si je veux partir sur le même principe de, quand je lance un programme, il m'en exécute un autre mais que je veux répéter l'opération plusieurs fois pour d'autres logiciels, est-ce qu'il est possible de tout mettre dans le même script ou alors je dois créer un script pour chaque ensemble de 2 logiciels?
Je sais pas si c'est assez clair.
Je poste un code faux qui vous donnera une idée sur ce que je souhaiterais faire :
► Afficher le texte
Code : Tout sélectionner
;Script pour XBMC
While 1
Sleep(1000)
If ProcessExists("XBMC.exe") Then
ShellExecute("C:\Documents and Settings\PimOoze\Bureau\xpadder_gamepad_profiler\XBMC.xpadderprofile")
While ProcessExists("XBMC.exe")
Sleep(500)
WEnd
ProcessClose("Xpadder.exe")
EndIf
WEnd
;Script pour Mirror's Edge
While 2
Sleep(1000)
If ProcessExists("MirrorsEdge.exe") Then
ShellExecute("C:\Documents and Settings\PimOoze\Bureau\xpadder_gamepad_profiler\Mirror's Edge.xpadderprofile")
While ProcessExists("MirrorsEdge.exe")
Sleep(500)
WEnd
EndIf
WEnd
avec adlibenable sa peut marcher non?
Re: [R] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 11:45
par Habibsbib
En fait, il veut lui même (c'est à dire sans autoit) exécuter un programme, et il désire qu'autoit détecte le moment ou il le lance pour en lancer un autre. Donc non, je ne pense pas que Ad
vlibEnable conviendrait dans cette situation.
Au fait Pimooz, je suis un peu curieux (

) à quoi il sert ton script ?
[..] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 12:54
par Utilisateur 2008 supprimé
C'est à dire? Tu pourrais me montrer un exemple de script avec la commande AdvlibEnable.
Si je veux lancer AutoIt mais je ne veux pas lancer plusieurs scripts. Je voudrais que chaque ensemble de 2 logiciels soient inclus dans un seul script.
En fait pour bien expliquer, je m'en sers pour plusieurs jeux PC. Par exemple, si je lance Mirror's Edge il me lance une certaine configuration de manette et si je lance Prototype, il me lance une autre configuration de manette.
Je sais pas si je suis assez clair...
Sâchez juste que l'autre script marchait bien mais que je voudrais ne pas avoir à lancer au démarrage de Windows les 10 scripts.
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 13:20
par pop45
tu fait les 2 chose en fonction et tu demande a chacune des 2 (avec advlibenable ) de s'executer tout les second pas exemple
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 13:50
par Utilisateur 2008 supprimé
Je suis obligé de mettre un temps donné?
Tu pourrais me faire une exemple?
Merci d'avance.
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 17:17
par pop45
PimOoze a écrit :Je suis obligé de mettre un temps donné?
Tu pourrais me faire une exemple?
Merci d'avance.
Je sait pas j'ai jamais utiliser ce genre de chose
Sa doit resemble a sa
Code : Tout sélectionner
adlibenable (fonction1 , 1000) ; pour une seconde
adlibenable (fonction2 , 1000) ; pareillle
func fonction1 ()
;
;La tu met le code du 1er script pour xmb je crois
;
enfunc
func fonction2 ()
;
La tu met le code du 2eme script pour mirrors edge
;
endfunc
Je pas sur que se soit comme sa

Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 17:38
par Iste
C'est quoi votre truc avec le nom de cette fonction ??
C'est "AdlibEnable" son nom !
A moins qu'il sagisse d'une autre fonction, d'un udf obscure ? mais aucune trace n'en est sur ce forum...
Bref passons, AdlibEnable n'est pas la solution, et en regle général, n'est pas une bonne solution
Ici simplement car AdlibEnable ne permet pas de lancer plusieurs fonctions (ce qui en soit suffit a bannir cette fonction) et en plus, les boucles contiennent d'autre boucle ! Ce qui bloquerai le script.
Bref, voici une idée, que je viendrais completer d'un exemple plus tard si il faut.
Dans les script crées, rajouter #NoTrayIcon$ pour plus les voir, récuperer le handle de leur process au lancment, et créer dans le script principal une GUI pour terminer ces process le moment venu
Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : sam. 17 oct. 2009 17:46
par Utilisateur 2008 supprimé
Merci pop45 mais ça ne fonctionne pas.
Et Iste je veux bien un exemple
J'ai réussi à cacher les scripts du systray. Mais j'aimerais que tu m'expliques plus précisément pour le reste avec un exemple.
Merci d'avance.

Re: [..] Exécuter un programme lorsque j'en lance un autre
Posté : lun. 19 oct. 2009 13:14
par Iste
Voici un exemple complet
► Afficher le texte
Code : Tout sélectionner
#Include <Constants.au3>
Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.
$script1 = script('notepad.exe',@SystemDir & '\calc.exe')
$item1 = TrayCreateItem('Fermer script1 pour notepad.exe')
$script2 = script('iexplorer.exe',@SystemDir & '\mspaint.exe')
$item2 = TrayCreateItem('Fermer script2 pour iexplorer.exe')
TrayCreateItem("")
$exititem = TrayCreateItem("Exit")
TraySetState()
While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $item1
ProcessClose($script1)
TrayItemDelete ( $item1 )
Case $msg = $item2
ProcessClose($script2)
TrayItemDelete ( $item2 )
Case $msg = $exititem
ExitLoop
EndSelect
WEnd
Exit
Func script($Process1, $Process2)
If IsDeclared("$P_Inumb") Then
$P_Inumb += 1
Else
Global $P_Inumb = 0
EndIf
Local $script = '#NoTrayIcon' & @CRLF _
&'While 1' & @CRLF _
&' Sleep(1000)' & @CRLF _
&' If ProcessExists("' & $Process1 & '") Then' & @CRLF _
&' Run("' & $Process2 & '")' & @CRLF _
&' While ProcessExists("' & $Process1 & '")' & @CRLF _
&' Sleep(500)' & @CRLF _
&' WEnd' & @CRLF _
&' ProcessClose("' & $Process2 & '")' & @CRLF _
&' EndIf' & @CRLF _
&'WEnd'
If FileExists(@TempDir & "\script" & $P_Inumb) Then FileDelete(@TempDir & "\script" & $P_Inumb)
FileWrite(@TempDir & "\script" & $P_Inumb, $script)
Return Run(@AutoItExe & ' /AutoIt3ExecuteScript '& @TempDir & "\script" & $P_Inumb)
EndFunc
La fonction script() lance l'exe "$Process2" quand le process $Process1 est détecté, et renvoi le PID du script qui s'occupe de faire ca. Il suffit donc de faire "$script = script('process','exe')" pour surveiller process et de faire ProcessClose($script) pour tuer le process qui surveille.
J'ai mi tout le coté GUI dans le tray apres..