1

Тема: AHK: v2 Как отловить создание/активизацию окна?

Хотелось бы отлавливать момент активизации окон приложений, будь то вновь созданное или активированное из неактивных/свернутых (Alt+Tab или мышкой или любым другим способом). Как сделать через таймер понятно, но вроде как-то это делают на событиях винды?.. Может есть у кого работающий кусок кода?

2

Re: AHK: v2 Как отловить создание/активизацию окна?

Вот что-то похожее.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

3

Re: AHK: v2 Как отловить создание/активизацию окна?

Да, то что надо, спасибо! Правда почему-то при отлове EVENT_OBJECT_CREATE или EVENT_OBJECT_SHOW событие 2 раза подряд происходит с интервалом примерно 90мс. При этом все входные параметры вызываемой callback-процедуры HookProc() одинаковые.

4

Re: AHK: v2 Как отловить создание/активизацию окна?

Лучше так:

#Requires AutoHotkey v2.0
Persistent

eventMin := eventMax := EVENT_SYSTEM_FOREGROUND := 0x0003
Hook := WinEventHook(eventMin, eventMax, HookProc, 'F')
HookProc('', '', WinExist('A'))

HookProc(hWinEventHook, event, hwnd, *) {
    CoordMode 'ToolTip'
    ToolTip 'Active window'               . '`n'
          . 'Title: ' . WinGetTitle(hwnd) . '`n'
          . 'Class: ' . WinGetClass(hwnd), 2, 2
}

class WinEventHook
{
    ; Event Constants: https://is.gd/tRT5Wr
    __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