:172.271KB : :1 :2020-01-02 14:55:42
ShellHook是什么?当一个窗口创建、激活、关闭时,explorer总是能够捕获相应的消息,并更新任务栏上,就是通过ShellHook实现的。本课实现了对系统所有顶级窗口的拦截,和指定窗口的拦截。
RegisterWindowMessage函数定义一个新的窗口消息,保证该消息在系统范围内是唯一的。通常调用SendMessage或者PostMessage函数时,可以使用该函数返回的消息值。
注释:
RegisterWindowMessage函数通常用于为两个合作应用程序之间的通信登记消息。 若两个不同的应用程序登记了相同的消息字符串,则这两个应用程序返回相同的消息值。该消息一直维持被登记状态,直到Windows会话结束。当多个应用程序必须处理同一消息时才使用RegisterWindowMessage函数。在一个窗口类范围内发送私有消息时,获取分配给一个字串标识符的消息编号 &C000(49152) 到 &FFFF(65535)之间的一个消息编号。零意味着出错。
' 通过这个句柄可以来对特定的窗口干你需要的事。
.判断开始 (wParam = #无法载入的常量) ' 顶级窗口的创建’
调试输出 (“顶级窗口的创建”)
.判断 (wParam = #HSHELL_WINDOWDESTROYED) ' 顶级窗口的销毁’
调试输出 (“顶级窗口的销毁”)
.判断 (wParam = #HSHELL_ACTIVATESHELLWINDOW) ' SHELL的主窗体将被激活
调试输出 (“SHELL的主窗体将被激活”)
.判断 (wParam = #HSHELL_WINDOWACTIVATED) ' 顶级窗体被激活
调试输出 (“顶级窗体被激活”)
.判断 (wParam = #HSHELL_GETMINRECT) ' 顶级窗体被最大化或最小化
调试输出 (“顶级窗体被最大化或最小化”)
.判断 (wParam = #HSHELL_REDRAW) ' Windows任务栏被刷新
调试输出 (“Windows任务栏被刷新”)
.判断 (wParam = #HSHELL_TASKMAN) ' 任务列表的内容被选中
调试输出 (“任务列表的内容被选中”)
.判断 (wParam = #HSHELL_LANGUAGE) ' 中英文切换或输入法切换
调试输出 (“中英文切换或输入法切换”)
.判断 (wParam = #HSHELL_SYSMENU) ' 显示系统菜单
调试输出 (“显示系统菜单”)
.判断 (wParam = #HSHELL_ENDTASK) ' 顶级窗体被强制关闭
调试输出 (“顶级窗体被强制关闭”)
.判断 (wParam = #HSHELL_ACCESSIBILITYSTATE) ' Windows NT5.0或以上版本有效,指示"可访问性"已被改变.
调试输出 (“可访问性已被改变”)
.判断 (wParam = #HSHELL_APPCOMMAND) ' 没有被程序处理的APPCOMMAND。见WM_APPCOMMAND
调试输出 (“没有被程序处理的APPCOMMAND”)
.判断 (wParam = #HSHELL_WINDOWREPLACED) ' wParam=被替换的顶级窗口的hWnd
调试输出 (“被替换的顶级窗口的hWnd”)
.判断 (wParam = #HSHELL_WINDOWREPLACING) ' wParam=替换顶级窗口的窗口hWnd
调试输出 (“替换顶级窗口的窗口hWnd”)
.判断 (wParam = #HSHELL_FLASH) ' 标题闪烁(HSHELL_REDRAW + HSHELL_HIGHBIT)
调试输出 (“标题闪烁”)
.判断 (wParam = #HSHELL_RUDEAPPACTIVATED) ' 顶级窗口切换:(HSHELL_WINDOWACTIVATED + HSHELL_HIGHBIT)
调试输出 (“顶级窗口切换”)