Outils pour utilisateurs

Outils du site


tutos:software:launcher:rocketlauncher:demarrer_plusieurs_programmes_ouverture_hypersp
Cette version est dépassée. Une version approuvée plus récente existe.DiffCette version (2017/01/29 16:23) est en ébauche.
Approuvés: 0/1

Ceci est une ancienne révision du document !


Démarrer plusieurs programmes à l'ouverture d'Hypersp

Tutoriel original : Bopz44 du 24/08/2014

Salut, vous connaissez très certainement tous la fonction Exit de Hyperhq qui vous permet de démarrer un programme a l'ouverture de Hyperspin et de le fermer lorsque vous quittez le frontend. Le problème est que l'on ne peut pas y insérer qu'un seul programme, assez ambetant quand on veut utiliser Xpadder, HyperSearch ou d'autres programmes specifiques au bon fonctionnement d'Hyperspin.

Pour y remedier on va creer un script AutoHotkey qui indiquera les programmes a exécuter ou a quitter.

1°) Récupérer le programme AutoHotkey sur le site officiel ICI, et l'installer.

2°) Aller dans le dossier Hyperspin, créer un nouveau document texte, et renommez le ; par exemple START (choisissez le nom a lui donner) et surtout renommez l'extention en “.ahk” (sans les guillemets)

3°) Click droit sur votre fichier nouvellement crée et la de nouvelles options auront ete ajoutés par AutoHotkey dont 'Edit Script'. Editez donc le script en y entrant ce code :

#NoEnv
#SingleInstance force
SetBatchLines, -1
SetWorkingDir, %A_ScriptDir%

IniRead, origValue, % A_WorkingDir . "\Settings\Settings.ini", Main, Hyperlaunch_Path
IniWrite, % SubStr(A_ScriptFullPath, 1, 1) . SubStr(origValue, 2), % A_WorkingDir . "\Settings\Settings.ini", Main, Hyperlaunch_Path

Run, .\

4°) Toute la premiere partie du code sert a rendre hyperspin portable ca n'a rien a voir avec ce tuto mais autant le mettre avec ca mange pas de pain :D

Maintenant interessons nous a la derniere ligne : Run, .\

Run, est la commande qui va executer le programme, tandis que .\ est un chemin relatif indiquant la localisation de depart de votre script :

Si par exemple votre script se trouve dans : C:\Hyperspin\START.ahk

Et que le programme que vous voulez lancer dans : C:\Hyperspin\HyperLaunch\Module Extensions\HyperSearch\HyperSearch.exe

Alors votre chemin relatif sera : .\HyperLaunch\Module Extensions\HyperSearch\HyperSearch.exe

Maintenant a vous d'indiquer dans le script le chemin du programme desiré, pour en rajouter un autre suffit d'ajouter une nouvelle ligne de commande. Voila par exemple le mien :

Run, .\HyperLaunch\Profiles\Xpadder\HyperSpin\p1.xpadderprofile
Run, .\ZZ-UTILS\HyperSearch\HyperSearch.exe
Run, .\ZZ-UTILS\NoMousy1.5\KILL MOUSE.exe
Run, .\ZZ-UTILS\NoMousy1.5\KILL TASK.exe

5°) Passons au script de sortie, creer un nouveau script par exemple 'EXIT.ahk' l'editer et y entrer le code :

#NoTrayIcon
#NoEnv
#Persistent
#SingleInstance force

Process Close, Xpadder.exe

DetectHiddenWindows, On
SetWorkingDir %A_ScriptDir%

NoTrayOrphans()
ExitApp
Return

NoTrayOrphans() {
TrayInfo:= TrayIcons(sExeName,"ahk_class Shell_TrayWnd","ToolbarWindow32" . GetTrayBar()) "`n"
. TrayIcons(sExeName,"ahk_class NotifyIconOverflowWindow","ToolbarWindow321")
Loop, Parse, TrayInfo, `n
{
ProcessName:= StrX(A_Loopfield, "| Process: ", " |")
ProcesshWnd:= StrX(A_Loopfield, "| hWnd: ", " |")
ProcessuID := StrX(A_Loopfield, "| uID: ", " |")
If !ProcessName ProcesshWnd
RemoveTrayIcon(ProcesshWnd, ProcessuID)
}
}
RemoveTrayIcon(hWnd, uID, nMsg = 0, hIcon = 0, nRemove = 2) {
NumPut(VarSetCapacity(ni,444,0), ni)
NumPut(hWnd , ni, 4)
NumPut(uID , ni, 8)
NumPut(1|2|4, ni,12)
NumPut(nMsg , ni,16)
NumPut(hIcon, ni,20)
Return DllCall("shell32\Shell_NotifyIconA", "Uint", nRemove, "Uint", ni)
}
TrayIcons(sExeName,traywindow,control) {
DetectHiddenWindows, On
WinGet, pidTaskbar, PID, %traywindow%
hProc:= DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar)
pProc:= DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0, "Uint", 32, "Uint", 0x1000, "Uint", 0x4)
SendMessage, 0x418, 0, 0, %control%, %traywindow%
Loop, %ErrorLevel%
{
SendMessage, 0x417, A_Index-1, pProc, %control%, %traywindow%
VarSetCapacity(btn,32,0), VarSetCapacity(nfo,32,0)
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", pProc, "Uint", btn, "Uint", 32, "Uint", 0)
iBitmap := NumGet(btn, 0)
idn := NumGet(btn, 4)
Statyle := NumGet(btn, 8)
If dwData := NumGet(btn,12)
iString := NumGet(btn,16)
Else dwData := NumGet(btn,16,"int64"), iString:=NumGet(btn,24,"int64")
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", dwData, "Uint", nfo, "Uint", 32, "Uint", 0)
If NumGet(btn,12)
hWnd := NumGet(nfo, 0)
, uID := NumGet(nfo, 4)
, nMsg := NumGet(nfo, 8)
, hIcon := NumGet(nfo,20)
Else hWnd := NumGet(nfo, 0,"int64"), uID:=NumGet(nfo, 8), nMsg:=NumGet(nfo,12), hIcon := NumGet(nfo,24)
WinGet, pid, PID, ahk_id %hWnd%
WinGet, sProcess, ProcessName, ahk_id %hWnd%
WinGetClass, sClass, ahk_id %hWnd%
If !sExeName || (sExeName = sProcess) || (sExeName = pid)
VarSetCapacity(sTooltip,128), VarSetCapacity(wTooltip,128*2)
, DllCall("ReadProcessMemory", "Uint", hProc, "Uint", iString, "Uint", wTooltip, "Uint", 128*2, "Uint", 0)
, DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "str", wTooltip, "int", -1, "str", sTooltip, "int", 128, "Uint", 0, "Uint", 0)
, sTrayIcons .= "idx: " . A_Index-1 . " | idn: " . idn . " | Pid: " . pid . " | uID: " . uID . " | MessageID: " . nMsg . " | hWnd: " . hWnd . " | Class: " . sClass . " | Process: " . sProcess . " | Icon: " . hIcon . " | Tooltip: " . wTooltip . "`n"
}
DllCall("VirtualFreeEx", "Uint", hProc, "Uint", pProc, "Uint", 0, "Uint", 0x8000)
DllCall("CloseHandle", "Uint", hProc)
return sTrayIcons
}
GetTrayBar() {
ControlGet, hParent, hWnd,, TrayNotifyWnd1 , ahk_class Shell_TrayWnd
ControlGet, hChild , hWnd,, ToolbarWindow321, ahk_id %hParent%
Loop {
ControlGet, hWnd, hWnd,, ToolbarWindow32%A_Index%, ahk_class Shell_TrayWnd
If Not hWnd
Break
Else If hWnd = %hChild%
{
idxTB := A_Index
Break
}
}
Return idxTB
}

StrX( H,BS="",ES="",Tr=1,ByRef OS=1) {
return,(SP := InStr(H,BS,0,OS)) (L := InStr(H,ES,0,SP+StrLen(BS))) (OS := L + StrLen(ES)) ? SubStr(H,SP := Tr ? SP + StrLen(BS) : SP ,(Tr ? L : L + StrLen(ES))-SP) : ""
}

Comme vous pouvez le voir ce code est beaucoup plus conséquent et pour une bonne raison :

Il y a souvent des bugs de rafraichissements lorsque certains programmes sont quittés avec AutoHotkey, en fait Windows les quitte proprement mais n'a pas le temps de rafraichir l'icone du programme dans la task bar en bas a droite, et vous seriez obliger de passer dessus avec votre souris pour qu'il disparaisse (pas très propre).

Ce script va faire le taff ni vu ni connu ;)

Intéressons nous donc a la ligne : Process Close,

Process Close, est la commande qui indique a AutoHotkey quel programme il doit fermer, suffit donc de rajouter le nom du prorgramme dans mon cas :

Process Close, Irotate.exe
Process Close, HyperSearch.exe
Process Close, Xpadder.exe
Process Close, KILL MOUSE.exe
Process Close, KILL TASK.exe

6°) Voila plus qu'a tester les scripts et les compiler, double click sur START.ahk, la logiquement les programmes que vous avez indiquer dans votre script se lancent ; double click sur EXIT.ahk, la logiquement les programmes lancés devraient se fermer.

Une fois satisfait faites un click droit sur votre script et clicker sur 'Compile Script' ca va vous creer un executable exe donc vous pouvez meme desinstaller autohotkey si vous voulez mais je vous conseille de le garder tant cet outil est utile :p

Il ne vous suffit plus qu'a indiquer dans votre fichier settings.ini le chemin de vos executable, dans mon cas je veux concerver la portabilité de Hyperspin j'ai donc mis mes 2 executables dans le meme dossier que mon Hyperspin.exe, du coup ma config ressemble a ca et tout roule impec ;) :

[Startup Program]
Executable=START.exe
Paramaters=
Working_Directory=
WinState=NORMAL
[Exit Program]
Executable=EXIT.exe
Paramaters=
Working_Directory=
WinState=NORMAL

Si vous avez des questions des remarques n'hésitez pas ;)

tutos/software/launcher/rocketlauncher/demarrer_plusieurs_programmes_ouverture_hypersp.1485703419.txt.gz · Dernière modification: 2017/01/29 16:23 de oijkn