musicstashall
Знающий
- Сообщения
- 322
- Репутация
- 7
Имеется скрипт, отрабатывающий на событие открытия любого окна. Нужно точно так же получить событие, когда открываются дочерние окна. Как это реализовать?? Например, открыли «сетевые подключения», определяется как explorer.exe, но если открывается свойства какого-то подключения, то скрипт этого не фиксирует. Облазил весь инет, похоже, что AutoIt не имеет стандартных решений.
Пока нахожу только одно решение — включить цикл и мониторить активные окна:
Но такой вариант не совсем устраивает. В этот момент могут открываться какие угодно окна и будут ложные результаты.
Может есть способ получить, является ли в данный момент активное окно дочерним к определенному? Создать маску?? Фильтровать по маске?
Код:
#include <Misc.au3>
#include <Process.au3>
#Include <WinAPI.au3>
Global Const $HSHELL_WINDOWCREATED = 1
Global Const $HSHELL_WINDOWACTIVATED = 4;
Global Const $HWND_MESSAGE = -3
Global $bHook = 1
$hGui = GUICreate("", 10, 10, -1, 0,-1,-1,$HWND_MESSAGE)
GUIRegisterMsg(_WinAPI_RegisterWindowMessage("SHELLHOOK"), "HookProc")
ShellHookWindow($hGui, $bHook)
Func hookproc($hwnd, $msg, $wparam, $lparam); функция отрабатывает при открытии любого окна
Switch $wparam
Case $hshell_windowcreated
$Win = _processgetname(WinGetProcess($lparam)); получаем имя процесса открытого окна.
Case $hshell_windowactivated
EndSwitch
EndFunc
;процедура перехвата дочерних окон, может быть как-то так:
Func hookproc("??????")
$Win = _processgetname(WinGetProcess($lparam)); получаем имя процесса открытого дочернего окна
EndFunc
Func ShellHookWindow($hWnd, $bFlag)
Local $sFunc = 'DeregisterShellHookWindow'
If $bFlag Then $sFunc = 'RegisterShellHookWindow'
Local $aRet = DllCall('user32.dll', 'int', $sFunc, 'hwnd', $hWnd)
Return $aRet[0]
EndFunc
Пока нахожу только одно решение — включить цикл и мониторить активные окна:
Код:
$Handle = WinGetHandle("[active]")
Но такой вариант не совсем устраивает. В этот момент могут открываться какие угодно окна и будут ложные результаты.
Может есть способ получить, является ли в данный момент активное окно дочерним к определенному? Создать маску?? Фильтровать по маске?