Показать полную графическую версию : [решено] Получение нотификации об изменении активного окна
Lapa2005
26-06-2013, 15:43
День добрый.
Есть несколько скриптов с наборами хоткеев для разных приложений. Хочется сделать мастер скрипт, который бы получал нотификацию о смене активного окна, и в зависимости от того какое окно стало активным, делал переключение между наборами хоткеев. Есть ли подходящие апи, или нужно по таймеру проверять какое окно активно?
Спасибо.
Хук отлавливания активного окна:
#NoTrayIcon (http://autoit-script.ru/autoit3_docs/keywords.htm##notrayicon)
#include (http://autoit-script.ru/autoit3_docs/keywords.htm##include) <WinAPI.au3>
Opt (http://autoit-script.ru/autoit3_docs/functions/Opt.htm)("WinWaitDelay", 0)
HotKeySet (http://autoit-script.ru/autoit3_docs/functions/HotKeySet.htm)('{ESC}', '_Exit')
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) Const (http://www.autoitscript.com/autoit3/docs/keywords.htm#Const) $HSHELL_WINDOWACTIVATED = 4
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) Const (http://www.autoitscript.com/autoit3/docs/keywords.htm#Const) $HSHELL_RUDEAPPACTIVATED = 32772
$iMsg = _WinAPI_RegisterWindowMessage (http://autoit-script.ru/autoit3_docs/libfunctions/_winapi_registerwindowmessage.htm)('SHELLHOOK')
GUIRegisterMsg (http://autoit-script.ru/autoit3_docs/functions/GUIRegisterMsg.htm)($iMsg, 'HShellWndProc')
DllCall (http://autoit-script.ru/autoit3_docs/functions/DllCall.htm)('user32.dll', 'int', 'RegisterShellHookWindow', 'hwnd', GUICreate (http://autoit-script.ru/autoit3_docs/functions/GUICreate.htm)(''))
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
Sleep (http://autoit-script.ru/autoit3_docs/functions/Sleep.htm)(100)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Exit()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) HShellWndProc($hWnd, $Msg, $wParam, $lParam)
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $wParam
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $HSHELL_WINDOWACTIVATED, $HSHELL_RUDEAPPACTIVATED
ToolTip (http://autoit-script.ru/autoit3_docs/functions/ToolTip.htm)(WinGetTitle (http://autoit-script.ru/autoit3_docs/functions/WinGetTitle.htm)($lParam), -1, -1, 'Active Window Title')
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
madmasles
27-06-2013, 06:08
Creat0R,
У меня на Win7x86 Ваш код не работает. :(
$wParam возвращает только HSHELL_WINDOWDESTROYED (0x00000002) и HSHELL_REDRAW (0x00000006).
Разобрался. У меня работает скрипт, который создает скрытые окна IE. Если его отключить, то Ваш код отлавливает активные окна, если скрипт работает, то нет. Почему? Не понятно.
У меня работает скрипт, который создает скрытые окна IE »
Возможно он как то использует хук...
Можно на него посмотреть?
madmasles
28-06-2013, 14:27
Возможно он как то использует хук... »
Нет, он не использует хук, он использует полноэкранный режим IE. Если в Вашу функцию добавить;...
Case $HSHELL_WINDOWACTIVATED, $HSHELL_RUDEAPPACTIVATED ;($HSHELL_RUDEAPPACTIVATED = 32772)
;...то все работает. (читал об этом здесь. (http://olegart.livejournal.com/1424299.html))
Если в Вашу функцию добавить »
Обновил свой код выше.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.