[HV2] 窗口监视模块 - Hawkeye

许多实用脚本和封装函数, 可以让您编写脚本更加便捷高效
arcticir
Posts: 471
Joined: 17 Nov 2013, 11:32

[HV2] 窗口监视模块 - Hawkeye

28 Aug 2015, 07:15

Aurora 模块
监听窗口消息以监控窗口


具体行为:啊呀这个窗口又这样了,我要看看有没有触发什么命令的说。
实例:

Code: [Select all] [Download] GeSHi © Codebox Plus

桌面被激活了,要更新壁纸了;
关闭游戏后,FLASH广告正在创建,还没显示,强制结束它的进程;
QQ又有弹窗了,也关闭它
我的播放器全屏了,就把其他程序声音调到0
呃,你又不全屏了啊?那再调回来。
浏览器网页无法打开的提示出现了,给我用代理打开它。
这个AHK进程退出了,看看它有没有什么遗言,要执行的命令不


优点是不用定时器。
有几个缺点
1,无法监听窗口的最小最大化,不知道有啥其他办法没
2,如果进程创建时没有创建窗口就无法监听进程的创建事件


消息类型:
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 窗口切换


使用方法:
1 把Hawkeye.txt保存到\Profile目录下
2 在 Aurora.ini [Module] 添加 Hawkeye=1 ;添加到模块,并且启用
3 在 Hawkeye.txt 同目录 创建INI配置文件 Hawkeye.i ;因为INI文件会被当作命令读取,所以使用i格式

Hawkeye.txt

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus



最后一步:
模块已经添加完成,现在设置具体的窗口命令

Hawkeye.i

Code: [Select all] [Download] GeSHi © Codebox Plus

[Class]
Progman={32772:"Wallpaper",53:"Wallpaper"}
WorkerW={32772:"Wallpaper",53:"Wallpaper"}
[Title]
[EXE]


解读下它的具体使用
以这段来说 [Class] / Progman={32772:"Wallpaper",53:"Wallpaper"}:
当事件的窗口类名是"Progman",事件的编号是32772 或者 53 都会触发 Hawkeye_Wallpaper 函数 (Hawkeye_是自动添加)

那么现在写Wallpaper函数。
在 命令目录 \Profile 下的任何目录创建 Hawkeye_Wallpaper.txt
内容是:

Code: [Select all] [Download] GeSHi © Codebox Plus

Hawkeye_Wallpaper(){
;把你更换壁纸的代码写到这里
}


最后模块就会通过 AHKFUNC() 动态调用这个函数。不想每个函数都单独保存,直接放到Hawkeye.txt里也可以,速度更快,就是函数一多不好管理。

以上。权当模块的教程。
User avatar
RobertL
Posts: 540
Joined: 18 Jan 2014, 01:14
Location: China

Re: [HV2] 窗口监视模块 - Hawkeye

28 Aug 2015, 08:08

实例应用涵盖全面,很诱人...

貌似/未验证。子窗口的消息(如,最大化/最小化),需要监其窗口类中指定的消息处理过程,可以由窗口类并用钩子的方式获取一切窗口(含子窗口)的消息,但各个子窗口实例化时指定的消息处理过程可能各异,所以看需求用钩子..

你列的消息类型出自来?怎么上面的项目比MSDN描述的还多呢?→以上用的RegisterShellHookWindow函数,我理解为SetWindowsHookEx函数了。

顶级窗口即桌面级的窗口吧?→属于桌面的,非Owned窗口,即,属于桌面的独立窗口。

“如果进程创建时没有创建窗口就无法监听进程的创建事件”即,进程创建的第一个窗口无法监听?→如果一个线程中没有窗口,系统是不会给他提供消息队列的,命令是直接被发送,进而无法使用钩子来监控

参见:
MSDN中窗口相关的部分(英文),钩子部分Hooks Overview消息类型 ShellProc callback function (Windows)
RegisterShellHookWindow怎样能监视这个窗口的出现?

其他:SystemParametersInfo函数,SPI_SETDESKWALLPAPER参数,可以用于改变壁纸。
Last edited by RobertL on 31 Aug 2015, 04:37, edited 5 times in total.
我为人人,人人为己?
User avatar
Array
Posts: 5
Joined: 22 Dec 2013, 08:48

Re: [HV2] 窗口监视模块 - Hawkeye

31 Aug 2015, 04:20

great! 潮汐好牛逼。
arcticir
Posts: 471
Joined: 17 Nov 2013, 11:32

Re: [HV2] 窗口监视模块 - Hawkeye

31 Aug 2015, 05:13

你是说如何判断这个窗口是新出现的?
判断Window[hwnd] 有没有就行了。
User avatar
RobertL
Posts: 540
Joined: 18 Jan 2014, 01:14
Location: China

Re: [HV2] 窗口监视模块 - Hawkeye

31 Aug 2015, 09:54

突然有个问题,WinWait是否可行,是否可以同时开启多个监控,是否无需多线程。
如果可以,把需要监控的东西放到各个伪线程中等待就行了吧...不知道内部是不是也是通过监听实现的。

监控子窗口的问题论坛刚有讨论下怎样能监视这个窗口的出现?
我为人人,人人为己?
User avatar
Array
Posts: 5
Joined: 22 Dec 2013, 08:48

Re: [HV2] 窗口监视模块 - Hawkeye

01 Sep 2015, 20:40

viewtopic.php?f=6&t=6463

使用这个库不就可以了吗?
User avatar
RobertL
Posts: 540
Joined: 18 Jan 2014, 01:14
Location: China

Re: [HV2] 窗口监视模块 - Hawkeye

06 Sep 2015, 07:48

Array wrote:http://ahkscript.org/boards/viewtopic.php?f=6&t=6463

使用这个库不就可以了吗?

赞...
消息太闭塞了,得口口相传...效率何其低啊...
值得翻译,转载到中文论坛/板块。

嗯,那个OnWin还有不足,貌似是开启多进程模拟监视 :shock:
外加现在(1.0.03)还没有停止监视的功能...已反馈,说能解决

OnWin的简单翻译见AHK8帖子

关于RegisterShellHookWindow的可运行的演示,展示了可以获取到的消息。
主要是HSHELL_WINDOWACTIVATED,较窄。

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus


后续更新见AHK中文论坛\窗口监控相关
我为人人,人人为己?
User avatar
Array
Posts: 5
Joined: 22 Dec 2013, 08:48

Re: [HV2] 窗口监视模块 - Hawkeye

16 Sep 2015, 01:46

RobertL wrote:
Array wrote:http://ahkscript.org/boards/viewtopic.php?f=6&t=6463

使用这个库不就可以了吗?

赞...
消息太闭塞了,得口口相传...效率何其低啊...
值得翻译,转载到中文论坛/板块。

嗯,那个OnWin还有不足,貌似是开启多进程模拟监视 :shock:
外加现在(1.0.03)还没有停止监视的功能...已反馈,说能解决

OnWin的简单翻译见AHK8帖子

关于RegisterShellHookWindow的可运行的演示,展示了可以获取到的消息。
主要是HSHELL_WINDOWACTIVATED,较窄。

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus


后续更新见AHK中文论坛\窗口监控相关



突然忘记onwin怎么找到,并且是怎么用的了。失忆症。。。 :shock:
arcticir
Posts: 471
Joined: 17 Nov 2013, 11:32

Re: [HV2] 窗口监视模块 - Hawkeye

21 Jul 2016, 08:00

看了下这个"onwin",竟然用的是定时器,差评.

Return to “脚本函数”

Who is online

Users browsing this forum: No registered users and 1 guest