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 :
Code : Tout sélectionner
#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, .\
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 :
Code : Tout sélectionner
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
Code : Tout sélectionner
#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) : ""
}
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 :
Code : Tout sélectionner
Process Close, Irotate.exe
Process Close, HyperSearch.exe
Process Close, Xpadder.exe
Process Close, KILL MOUSE.exe
Process Close, KILL TASK.exe
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 :
Code : Tout sélectionner
[Startup Program]
Executable=START.exe
Paramaters=
Working_Directory=
WinState=NORMAL
[Exit Program]
Executable=EXIT.exe
Paramaters=
Working_Directory=
WinState=NORMAL