-
Notifications
You must be signed in to change notification settings - Fork 73
/
Copy pathIsService.ahk
32 lines (28 loc) · 1.35 KB
/
IsService.ahk
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
/*
Determina si el servicio especificado existe en el sistema.
Parámetros:
ServiceName: El nombre del servicio en la base de datos del gestor de control de servicios.
Return:
Si el servicio existe devuelve 1, caso contrario devuelve 0.
Ejemplo:
msgbox(IsService('spooler'))
*/
IsService(ServiceName)
{
Local ENUM_SERVICE_STATUS_PROCESS, Size, ServicesReturned, n
, hSCManager := DllCall('AdvApi32.dll\OpenSCManagerW', 'Ptr', 0, 'Ptr', 0, 'UInt', 0x0004, 'Ptr')
DllCall('AdvApi32.dll\EnumServicesStatusExW', 'Ptr', hSCManager, 'UInt', 0, 'UInt', 0x0000003B, 'UInt', 0x00000003, 'Ptr', 0, 'UInt', 0, 'UIntP', Size, 'UIntP', 0, 'Ptr', 0, 'Ptr', 0)
VarSetCapacity(ENUM_SERVICE_STATUS_PROCESS, Size, 0)
DllCall('Advapi32.dll\EnumServicesStatusExW', 'Ptr', hSCManager, 'UInt', 0, 'UInt', 0x0000003B, 'UInt', 0x00000003, 'UPtr', &ENUM_SERVICE_STATUS_PROCESS, 'UInt', Size, 'UIntP', Size, 'UIntP', ServicesReturned, 'Ptr', 0, 'Ptr', 0)
n := A_PtrSize * 3 + 4 * 8
Loop (ServicesReturned)
{
If (StrGet(NumGet(&ENUM_SERVICE_STATUS_PROCESS + (A_Index - 1) * n), 'UTF-16') = ServiceName)
{
DllCall('Advapi32.dll\CloseServiceHandle','Ptr', hSCManager)
Return (TRUE)
}
}
DllCall('Advapi32.dll\CloseServiceHandle','Ptr', hSCManager)
Return (FALSE)
}