ShellHook是什么?当一个窗口创建、激活、关闭时,explorer总是能够捕获相应的消息,并更新任务栏上,就是通过ShellHook实现的。本课实现了对系统所有顶级窗口的拦截,和指定窗口的拦截。
RegisterWindowMessage
RegisterWindowMessage函数定义一个新的窗口消息,保证该消息在系统范围内是唯一的。通常调用SendMessage或者PostMessage函数时,可以使用该函数返回的消息值。
注释:
RegisterWindowMessage函数通常用于为两个合作应用程序之间的通信登记消息。 若两个不同的应用程序登记了相同的消息字符串,则这两个应用程序返回相同的消息值。该消息一直维持被登记状态,直到Windows会话结束。当多个应用程序必须处理同一消息时才使用RegisterWindowMessage函数。在一个窗口类范围内发送私有消息时,获取分配给一个字串标识符的消息编号 &C000(49152) 到 &FFFF(65535)之间的一个消息编号。零意味着出错。
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-registerwindowmessagea
字符串常见有:
TaskBarCreated 一般用于Explorer崩溃后的托盘图标重建
SHELLHOOK 配合RegisterShellHookWindow可用于拦截系统窗口创建等
TaskbarButtonCreated 在win7里的任务按钮创建
RegisterShellHookWindow
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-registershellhookwindow
开始拦截
.版本 2 .子程序 开始拦截 MsgNum = RegisterWindowMessage (“SHELLHOOK”) .如果真 (MsgNum = 0) 信息框 (“注册shell hook 失败”, 0, , ) 返回 () .如果真结束 RegisterShellHookWindow (取窗口句柄 ()) ' 窗口子类化 SetRet = SetWindowLong (取窗口句柄 (), -4, 到整数 (&NewProc))
窗口子类化
.版本 2 .支持库 iext .子程序 NewProc, 整数型 .参数 Hwnd, , , 这个句柄是程序本身的句柄 .参数 uMsg, , , 用户的消息识别类型 .参数 wParam, , , 事件类别 .参数 lParam, , , 拦截的系统的窗口 的句柄 .局部变量 Tid .局部变量 i ' 只针对某一个特定顶级窗口hook .如果真 (lParam = 取指定窗口句柄 (“无标题 - 记事本”)) .判断开始 (wParam = 1) ' 顶级窗口的创建’ GetWindowThreadProcessId (lParam, Tid) .如果真 (Tid ≠ 0) i = 超级列表框1.插入表项 (, “窗口创建”, , , , ) 超级列表框1.置标题 (i, 1, 到文本 (lParam)) 超级列表框1.置标题 (i, 2, 到文本 (Tid)) 超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam))) 超级列表框1.保证显示 (i) .如果真结束 .判断 (wParam = 2) ' 顶级窗口的销毁’ GetWindowThreadProcessId (lParam, Tid) .如果真 (Tid ≠ 0) i = 超级列表框1.插入表项 (, “窗口销毁”, , , , ) 超级列表框1.置标题 (i, 1, 到文本 (lParam)) 超级列表框1.置标题 (i, 2, 到文本 (Tid)) 超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam))) 超级列表框1.保证显示 (i) .如果真结束 .判断 (wParam = 32772) ' 顶级窗口切换 GetWindowThreadProcessId (lParam, Tid) .如果真 (Tid ≠ 0) i = 超级列表框1.插入表项 (, “窗口切换”, , , , ) 超级列表框1.置标题 (i, 1, 到文本 (lParam)) 超级列表框1.置标题 (i, 2, 到文本 (Tid)) 超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam))) 超级列表框1.保证显示 (i) .如果真结束 .默认 .判断结束 .如果真结束 返回 (CallWindowProc (SetRet, Hwnd, uMsg, wParam, lParam))
百度网盘链接:https://pan.baidu.com/s/158ikKVjIwaoF4438MG4fhA
提取码:加QQ群:521068947 群文件下载
资源教程交流①群:521068947