无忧启动论坛

标题: 关于检测Win10任务栏窗口的问题 [打印本页]

作者: 求道者    时间: 2017-6-9 12:53
标题: 关于检测Win10任务栏窗口的问题
本帖最后由 求道者 于 2017-6-10 08:00 编辑
  1. ;#NoTrayIcon ;隐藏图标
  2. if not A_IsAdmin ;查询是否具有管理员权限
  3. {
  4.    Run *RunAs "%A_AhkPath%"  ; 需要 v1.0.92.01+
  5.    ExitApp
  6. }
  7. Loop ;循环
  8. {
  9.         IfWinExist, ahk_class Shell_TrayWnd ;判断是否存在ahk_class为Shell_TrayWnd的任务栏窗口
  10.         {
  11.                 SendMessage, 1466, , , , ahk_class Shell_TrayWnd ;什么用不知道但是用SendMessage向ahk_class为Shell_TrayWnd的任务栏窗口发送1466的Msg
  12.                 WinWaitClose, ahk_class Shell_TrayWnd ;等待ahk_class为Shell_TrayWnd的任务栏窗口关闭
  13.         }
  14.         /* ;这个去掉的话底层实现是否没变?
  15.         else ;否则
  16.         {
  17.                 WinWait, ahk_class Shell_TrayWnd ;等待ahk_class为Shell_TrayWnd的任务栏窗口开启
  18.         }
  19.         */
  20. }
复制代码


这是AHK源码

求问除了loop只有还有什么办法检测Win10任务栏窗口的存在?
hook吗?
作者: 金    时间: 2017-6-9 13:07
这源码我看不懂,判断窗口是否存在可以判断窗口句柄 线程ID 类名 等。。。
作者: 求道者    时间: 2017-6-9 18:58
金 发表于 2017-6-9 13:07
这源码我看不懂,判断窗口是否存在可以判断窗口句柄 线程ID 类名 等。。。


基本上是C C++的语法
只不过API是AHK内建的(比如SendMessage)

我也是那么想的

原来那位大哥(最初实现这个的那位)说是让我监视资源管理器进程……
但是发现资源管理器进程就用SendMessage发送1466消息的话……
会失效

于是就变成现在这种监视句柄存不存在这样了……
效果挺好
但是我把这个代码拿出来的时候 原作者说不要用Loop循环……
但是不循环就没法总是监视任务栏的状态了
作者: 金    时间: 2017-6-9 19:29
求道者 发表于 2017-6-9 18:58
基本上是C C++的语法
只不过API是AHK内建的(比如SendMessage)

不能循环判断那就,过滤窗口消息。explorer重启后会向应用程序发出通知注册消息(TaskbarCreated)
给你一段C++示例代码,不是我写的
  1. const UINT WM_TASKBARCREATED = RegisterWindowMessageW(L"TaskbarCreated");  
  2. BOOL CALLBACK MainDlgProc(HWND hWnd, UINT Message, WPARAM wPa, LPARAM lPa)  
  3. {  
  4.     if (Message == WM_RECOVERTRAY)  
  5.     {  
  6.         // Do something  
  7.         MessageBox(GetForegroundWindow(), L"WM_RECOVERTRAY", L"WM_RECOVERTRAY", 0);  
  8.     }  
  9. }
复制代码

或者懂易语言的话参照这个楼主的做法
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=387383
作者: 求道者    时间: 2017-6-9 19:59
金 发表于 2017-6-9 19:29
不能循环判断那就,过滤窗口消息。explorer重启后会向应用程序发出通知注册消息(TaskbarCreated)
给你 ...

易语言的源代码怎么看啊……
我用文本编辑器打开会乱码
作者: 求道者    时间: 2017-6-9 21:06
本帖最后由 求道者 于 2017-6-9 21:19 编辑
金 发表于 2017-6-9 19:29
不能循环判断那就,过滤窗口消息。explorer重启后会向应用程序发出通知注册消息(TaskbarCreated)
给你 ...

姑且算是OK了
  1. #NoTrayIcon ;隐藏图标
  2. if not A_IsAdmin ;查询是否具有管理员权限
  3. {
  4.    Run *RunAs "%A_AhkPath%"  ; 需要 v1.0.92.01+
  5.    ExitApp
  6. }
  7. OnMessage(DllCall("RegisterWindowMessage", Str, "TaskbarCreated"), "WM_TASKBARCREATED") ;当接收到消息TaskbarCreated时调用函数WM_TASKBARCREATED
  8. WM_TASKBARCREATED() ;函数WM_TASKBARCREATED
  9. {
  10.         SendMessage, 1466, , , , ahk_class Shell_TrayWnd ;什么原理不知道 但是用SendMessage向ahk_class为Shell_TrayWnd的任务栏窗口发送1466的Msg
  11. }
复制代码
监听消息后SendMessage
作者: 求道者    时间: 2017-6-9 21:06
frg521 发表于 2017-6-9 20:30
请问如何监控进程找到谁给发送了1466的消息,或者记录所有发送给任务栏的消息,有知道的说下,或者知道来源 ...

怕不是要hook
细节就不知道了
作者: 求道者    时间: 2017-6-9 21:31
frg521 发表于 2017-6-9 21:15
有没有类似监控注册表或者文件这样的工具监控发给任务栏的消息,哪怕所有消息?hook是自己编程还是有工具?

http://www.dongcoder.com/detail-82105.html
最后那一段好像是……
其他就真不知道了
作者: 金    时间: 2017-6-10 09:47
求道者 发表于 2017-6-9 19:59
易语言的源代码怎么看啊……
我用文本编辑器打开会乱码

需要用易语言打开,
作者: 求道者    时间: 2017-6-10 11:50
金 发表于 2017-6-10 09:47
需要用易语言打开,

这种源码不能用文本编辑器开的东西真是奇葩啊
作者: 金    时间: 2017-6-10 15:25
求道者 发表于 2017-6-10 11:50
这种源码不能用文本编辑器开的东西真是奇葩啊

易语言是特殊的,必须要用他的IDE才行




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3