Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Получение нотификации об изменении активного окна (http://forum.oszone.net/showthread.php?t=263223)

Lapa2005 26-06-2013 15:43 2174729

Получение нотификации об изменении активного окна
 
День добрый.
Есть несколько скриптов с наборами хоткеев для разных приложений. Хочется сделать мастер скрипт, который бы получал нотификацию о смене активного окна, и в зависимости от того какое окно стало активным, делал переключение между наборами хоткеев. Есть ли подходящие апи, или нужно по таймеру проверять какое окно активно?
Спасибо.

Creat0R 26-06-2013 17:42 2174830

Хук отлавливания активного окна:

Код:

#NoTrayIcon
#include <WinAPI.au3>

Opt("WinWaitDelay", 0)
HotKeySet('{ESC}', '_Exit')

Global Const $HSHELL_WINDOWACTIVATED = 4
Global Const $HSHELL_RUDEAPPACTIVATED = 32772

$iMsg = _WinAPI_RegisterWindowMessage('SHELLHOOK')
GUIRegisterMsg($iMsg, 'HShellWndProc')
DllCall('user32.dll', 'int', 'RegisterShellHookWindow', 'hwnd', GUICreate(''))

While 1
    Sleep(100)
WEnd

Func _Exit()
    Exit
EndFunc

Func HShellWndProc($hWnd, $Msg, $wParam, $lParam)
    Switch $wParam
        Case $HSHELL_WINDOWACTIVATED, $HSHELL_RUDEAPPACTIVATED
            ToolTip(WinGetTitle($lParam), -1, -1, 'Active Window Title')
    EndSwitch
EndFunc


madmasles 27-06-2013 06:08 2175066

Creat0R,
У меня на Win7x86 Ваш код не работает. :(
$wParam возвращает только HSHELL_WINDOWDESTROYED (0x00000002) и HSHELL_REDRAW (0x00000006).

Разобрался. У меня работает скрипт, который создает скрытые окна IE. Если его отключить, то Ваш код отлавливает активные окна, если скрипт работает, то нет. Почему? Не понятно.

Creat0R 27-06-2013 10:50 2175145

Цитата:

Цитата madmasles
У меня работает скрипт, который создает скрытые окна IE »

Возможно он как то использует хук...
Можно на него посмотреть?

madmasles 28-06-2013 14:27 2175871

Цитата:

Цитата Creat0R
Возможно он как то использует хук... »

Нет, он не использует хук, он использует полноэкранный режим IE. Если в Вашу функцию добавить
Код:

;...
                Case $HSHELL_WINDOWACTIVATED, $HSHELL_RUDEAPPACTIVATED ;($HSHELL_RUDEAPPACTIVATED = 32772)
                ;...

то все работает. (читал об этом здесь.)

Creat0R 30-06-2013 00:03 2176594

Цитата:

Цитата madmasles
Если в Вашу функцию добавить »

Обновил свой код выше.


Время: 01:43.

Время: 01:43.
© OSzone.net 2001-