Page 1 of 1
[v2] hawkeye() 监听窗口
Posted: 28 Aug 2015, 07:15
by arcticir
Code: Select all
hawkeye(){
DllCall("RegisterShellHookWindow", "ptr", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "Str", "ShellHook"), hawkeye_evente)
}
hawkeye_evente(wParam, lParam){
}
1 顶级窗体被创建
2 顶级窗体即将被关闭
3 SHELL 的主窗体将被激活
4 顶级窗体被激活
5 顶级窗体被最大化或最小化
6 Windows 任务栏被刷新,也可以理解成标题变更
7 任务列表的内容被选中
8 中英文切换或输入法切换
9 显示系统菜单
10 顶级窗体被强制关闭
11
12 没有被程序处理的APPCOMMAND。见WM_APPCOMMAND
13 wParam=被替换的顶级窗口的hWnd
14 wParam=替换顶级窗口的窗口hWnd
&H8000& 掩码
53 全屏
54 退出全屏
32772 窗口切换
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 28 Aug 2015, 08:08
by RobertL
实例应用涵盖全面,很诱人...
貌似/未验证。子窗口的消息(如,最大化/最小化),需要监其窗口类中指定的消息处理过程,可以由窗口类并用钩子的方式获取一切窗口(含子窗口)的消息,但各个子窗口实例化时指定的消息处理过程可能各异,所以看需求用钩子..
你列的消息类型出自来?怎么上面的项目比MSDN描述的还多呢?→以上用的RegisterShellHookWindow函数,我理解为SetWindowsHookEx函数了。
顶级窗口,
即桌面级的窗口吧?→属于桌面的,非Owned窗口,即,属于桌面的独立窗口。
“如果进程创建时没有创建窗口就无法监听进程的创建事件”即,进程创建的第一个窗口无法监听
?→如果一个线程中没有窗口,系统是不会给他提供消息队列的,命令是直接被发送,进而无法使用钩子来监控。
参见:
MSDN中窗口相关的部分(英文),钩子部分
Hooks Overview,
消息类型 ShellProc callback function (Windows)
,
RegisterShellHookWindow,
怎样能监视这个窗口的出现?。
其他:
SystemParametersInfo函数,SPI_SETDESKWALLPAPER参数,可以用于改变壁纸。
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 29 Aug 2015, 07:06
by td3zzz
mark
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 31 Aug 2015, 04:20
by Array
great! 潮汐好牛逼。
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 31 Aug 2015, 05:13
by arcticir
你是说如何判断这个窗口是新出现的?
判断Window[hwnd] 有没有就行了。
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 31 Aug 2015, 09:54
by RobertL
突然有个问题,WinWait是否可行,是否可以同时开启多个监控,是否无需多线程。
如果可以,把需要监控的东西放到各个伪线程中等待就行了吧...不知道内部是不是也是通过监听实现的。
监控子窗口的问题论坛刚有讨论下
怎样能监视这个窗口的出现?
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 01 Sep 2015, 20:40
by Array
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 06 Sep 2015, 07:48
by RobertL
赞...
消息太闭塞了,得口口相传...效率何其低啊...
值得翻译,转载到中文论坛/板块。
嗯,那个OnWin还有不足,貌似是开启多进程模拟监视
外加现在(1.0.03)还没有停止监视的功能...已反馈,说能解决
OnWin的简单翻译见
AHK8帖子。
关于
RegisterShellHookWindow的可运行的演示,展示了可以获取到的消息。
主要是HSHELL_WINDOWACTIVATED,较窄。
Code: Select all
;[url=https://msdn.microsoft.com/en-us/library/ms644989(v=vs.85).aspx]RegisterShellHookWindow function (Windows)[/url]
;[url=https://msdn.microsoft.com/en-us/library/ms644991(v=vs.85).aspx]ShellProc callback function (Windows)[/url]
;[url=http://ahkscript.org/boards/viewtopic.php?f=28&t=9324][HV2] 窗口监视模块 - Hawkeye - AHKScript (an AutoHotkey Forum)[/url]
;[url=https://msdn.microsoft.com/en-us/library/ms644959(v=vs.85).aspx#wh_shellhook]Hooks Overview (Windows)[/url]
DllCall("RegisterShellHookWindow", UInt,A_ScriptHwnd )
OnMessage(DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" ), "ShellHookProc" )
#q::ExitApp
ShellHookProc(wParam, lParam){
static HSHELL:={wParam:消息号,
(LTrim C Join,
1:"WINDOWCREATED"
2:"WINDOWDESTROYED"
3:"ACTIVATESHELLWINDOW"
4:"WINDOWACTIVATED"
5:"GETMINRECT"
6:"REDRAW"
7:"TASKMAN"
8:"LANGUAGE" ;仅ShellProc
9:"SYSMENU"
10:"ENDTASK" ;仅ShellProc
11:"ACCESSIBILITYSTATE" ;仅ShellProc
12:"APPCOMMAND"
13:"WINDOWREPLACED"
14:"WINDOWREPLACING" ;仅RegisterShellHookWindow
32772:"RUDEAPPACTIVATED" ;0x8004. 仅RegisterShellHookWindow
32774:"FLASH" ;0x8006. 仅RegisterShellHookWindow
;MONITORCHANGED:? ;仅RegisterShellHookWindow
;以上消息号自"WinUser.h"
;其中除后四个,其余见"ShellProc callback function (Windows)";后四个见"RegisterShellHookWindow function (Windows)"
)}
static History:={}
History.InsertAt(1,wParam,lParam)
historyList:=""
Loop 5
historyList.=A_Index ":`t" HSHELL[History[A_Index*2-1]] "`n`t" History[A_Index*2] "`n"
ToolTip %historyList%
}
后续更新
见AHK中文论坛\窗口监控相关
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 16 Sep 2015, 01:46
by Array
RobertL wrote:
赞...
消息太闭塞了,得口口相传...效率何其低啊...
值得翻译,转载到中文论坛/板块。
嗯,那个OnWin还有不足,貌似是开启多进程模拟监视
外加现在(1.0.03)还没有停止监视的功能...已反馈,说能解决
OnWin的简单翻译见
AHK8帖子。
关于
RegisterShellHookWindow的可运行的演示,展示了可以获取到的消息。
主要是HSHELL_WINDOWACTIVATED,较窄。
Code: Select all
;[url=https://msdn.microsoft.com/en-us/library/ms644989(v=vs.85).aspx]RegisterShellHookWindow function (Windows)[/url]
;[url=https://msdn.microsoft.com/en-us/library/ms644991(v=vs.85).aspx]ShellProc callback function (Windows)[/url]
;[url=http://ahkscript.org/boards/viewtopic.php?f=28&t=9324][HV2] 窗口监视模块 - Hawkeye - AHKScript (an AutoHotkey Forum)[/url]
;[url=https://msdn.microsoft.com/en-us/library/ms644959(v=vs.85).aspx#wh_shellhook]Hooks Overview (Windows)[/url]
DllCall("RegisterShellHookWindow", UInt,A_ScriptHwnd )
OnMessage(DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" ), "ShellHookProc" )
#q::ExitApp
ShellHookProc(wParam, lParam){
static HSHELL:={wParam:消息号,
(LTrim C Join,
1:"WINDOWCREATED"
2:"WINDOWDESTROYED"
3:"ACTIVATESHELLWINDOW"
4:"WINDOWACTIVATED"
5:"GETMINRECT"
6:"REDRAW"
7:"TASKMAN"
8:"LANGUAGE" ;仅ShellProc
9:"SYSMENU"
10:"ENDTASK" ;仅ShellProc
11:"ACCESSIBILITYSTATE" ;仅ShellProc
12:"APPCOMMAND"
13:"WINDOWREPLACED"
14:"WINDOWREPLACING" ;仅RegisterShellHookWindow
32772:"RUDEAPPACTIVATED" ;0x8004. 仅RegisterShellHookWindow
32774:"FLASH" ;0x8006. 仅RegisterShellHookWindow
;MONITORCHANGED:? ;仅RegisterShellHookWindow
;以上消息号自"WinUser.h"
;其中除后四个,其余见"ShellProc callback function (Windows)";后四个见"RegisterShellHookWindow function (Windows)"
)}
static History:={}
History.InsertAt(1,wParam,lParam)
historyList:=""
Loop 5
historyList.=A_Index ":`t" HSHELL[History[A_Index*2-1]] "`n`t" History[A_Index*2] "`n"
ToolTip %historyList%
}
后续更新
见AHK中文论坛\窗口监控相关
突然忘记onwin怎么找到,并且是怎么用的了。失忆症。。。
Re: [HV2] 窗口监视模块 - Hawkeye
Posted: 21 Jul 2016, 08:00
by arcticir
更新掉失效旧代码。