WELCOME UNIVERSE ROMs

jeudi 24 mars 2022

HSearch

 



Récupérez le programme AutoHotkey sur le site officiel, et installez le.
Allez dans le dossier Hyperspin, créez un nouveau document texte, et renommez le ; par exemple “START” (choisissez le nom à lui donner) et surtout renommez l'extention en “.ahk” (sans les guillemets).
Clic-droit sur votre fichier nouvellement créé et là de nouvelles options auront ete ajoutés par AutoHotkey dont “Edit Script”. Editez le 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, .\
Toute la premiere partie du code sert à rendre hyperspin portable. Ca n'a rien à voir avec ce tuto, mais autant le mettre avec, ça mange pas de pain
Maintenant intéressons nous à la derniere ligne : “Run, .\”.
“Run” est la commande qui va executer le programme, tandis que “.\” est un chemin relatif indiquant la localisation de départ de votre script.
Si par exemple votre script se trouve dans “C:\Hyperspin\START.ahk” et que le programme que vous voulez lancer est dans “C:\Hyperspin\HyperLaunch\Module Extensions\HyperSearch\HyperSearch.exe”, alors votre chemin relatif sera : “.\HyperLaunch\Module Extensions\HyperSearch\HyperSearch.exe”.me 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
Passons au script de sortie, pour ce faire créez un nouveau script (par exemple “EXIT.ahk”), éditez-le et entrez-y 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, 😎
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, 😎
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, 😎
, hIcon := NumGet(nfo,20)
Else hWnd := NumGet(nfo, 0,"int64"), uID:=NumGet(nfo, 😎, 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, ce, 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 rafraîchir l'icone du programme dans la task bar en bas a droite, et vous seriez obligés de passer dessus avec votre souris pour qu'il disparaisse (pas très propre).
Ce script va donc faire le taff ni vu ni connu !
Intéressons nous donc à la ligne “Process Close”.
“Process Close” est la commande qui indique à AutoHotkey quel programme doit être fermé. Il suffit donc d'ajouter le nom du programme, ce qui donnera 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
Voila, il ne reste plus qu'à plus qu'à tester les scripts et les compiler.
Faites un double-clic sur “START.ahk”, logiquement les programmes que vous avez indiqué dans votre script se lancent.
Faites de même sur “EXIT.ahk” et normalement les programmes lancés devraient se fermer.
Une fois satisfait, faites un clic-droit sur votre script et choisissez “Compile Script”.
Cela va vous créer un executable “exe”, donc vous pouvez même désinstaller autohotkey si vous voulez, mais je vous conseille de le garder tant cet outil est utile !
Il ne vous reste plus qu'à indiquer dans votre fichier “settings.ini” le chemin de vos executables.
Dans mon cas, je veux conserver la portabilité d'Hyperspin, j'ai donc mis mes 2 executables dans le même dossier que mon “Hyperspin.exe”, du coup ma config ressemble à ça et tout roule impec :
[Startup Program]
Executable=START.exe
Paramaters=
Working_Directory=
WinState=NORMAL
[Exit Program]
Executable=EXIT.exe
Paramaters=
Working_Directory=
WinState=NORMAL

Media