1

Тема: AHK: Завершение процесса после закрытия окна

Доброго времени суток . Подскажите как завершить процесс после закрытия окна . Есть приложения у которых нажимаешь красный крестик а оно висит в трэе.


WinWait, ahk_class GameCenter.TMainForm
WinWaitClose
{
WinGet, ahk_pid, PID, A
WinGet, active_pid, PID, A
WinGetTitle, active_title, A
}
Process, Close, %active_pid%
Return
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

2

Re: AHK: Завершение процесса после закрытия окна

Если хотите, могу пример на v2 написать, на v1 уже не хочется.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Завершение процесса после закрытия окна

teadrinker пишет:

Если хотите, могу пример на v2 написать, на v1 уже не хочется.

Если можно напишите.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

4

Re: AHK: Завершение процесса после закрытия окна

#Requires AutoHotkey v2
Persistent

wndClass := 'µTorrent4823DF041B09' ; класс окна, закрытие которого отслеживаем

EVENT_OBJECT_HIDE := 0x8003
Hook := WinEventHook(EVENT_OBJECT_HIDE, EVENT_OBJECT_HIDE, HookProc, 'F')

HookProc(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime) {
    static OBJID_WINDOW := 0
    try if (idObject = OBJID_WINDOW && wndClass = WinGetClass(hwnd)) {
        ProcessClose WinGetPID(hwnd)
    }
}

class WinEventHook
{
    __New(eventMin, eventMax, hookProc, options := '', idProcess := 0, idThread := 0, dwFlags := 0) {
        this.pCallback := CallbackCreate(hookProc, options, 7)
        this.hHook := DllCall('SetWinEventHook', 'UInt', eventMin, 'UInt', eventMax, 'Ptr', 0, 'Ptr', this.pCallback
                                               , 'UInt', idProcess, 'UInt', idThread, 'UInt', dwFlags, 'Ptr')
    }
    __Delete() {
        DllCall('UnhookWinEvent', 'Ptr', this.hHook)
        CallbackFree(this.pCallback)
    }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Завершение процесса после закрытия окна

Большое спасибо teadrinker всё работает. Подскажите как дописать несколько окон в "wndClass".

wndClass := 'GameCenter.TMainForm' or 'Qt51515QWindowIcon'

Так не работает.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

6

Re: AHK: Завершение процесса после закрытия окна

Попробуйте так:

#Requires AutoHotkey v2
Persistent

wndClass := 'class1|class2'

EVENT_OBJECT_HIDE := 0x8003
Hook := WinEventHook(EVENT_OBJECT_HIDE, EVENT_OBJECT_HIDE, HookProc, 'F')

HookProc(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime) {
    static OBJID_WINDOW := 0
    try if (idObject = OBJID_WINDOW && WinGetClass(hwnd) ~= wndClass) {
        ProcessClose WinGetPID(hwnd)
    }
}

class WinEventHook
{
    __New(eventMin, eventMax, hookProc, options := '', idProcess := 0, idThread := 0, dwFlags := 0) {
        this.pCallback := CallbackCreate(hookProc, options, 7)
        this.hHook := DllCall('SetWinEventHook', 'UInt', eventMin, 'UInt', eventMax, 'Ptr', 0, 'Ptr', this.pCallback
                                               , 'UInt', idProcess, 'UInt', idThread, 'UInt', dwFlags, 'Ptr')
    }
    __Delete() {
        DllCall('UnhookWinEvent', 'Ptr', this.hHook)
        CallbackFree(this.pCallback)
    }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Завершение процесса после закрытия окна

Уважаемый teadrinker Спасибо большое всё работает.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).