查看: 552|回复: 0

易语言HOOK系统顶级窗口的创建销毁切换

[复制链接]

3123

主题

3123

帖子

50

积分

超级版主

Rank: 8Rank: 8

积分
50
发表于 2021-7-31 13:42:12 | 显示全部楼层 |阅读模式
ShellHook是什么?当一个窗口创立、激活、封闭时,explorer总是能够捕捉相应的音讯,并更新义务栏上,就是经过ShellHook完成的。本课完成了对零碎一切顶级窗口的拦挡,和指定窗口的拦挡。

RegisterWindowMessage
RegisterWindowMessage函数定义一个新的窗口音讯,保障该音讯在零碎范畴内是惟一的。通常调用SendMessage或许PostMessage函数时,能够应用该函数前往的音讯值。

正文:
RegisterWindowMessage函数通罕用于为两个协作应用顺序之间的通讯注销音讯。  若两个不同的应用顺序注销了相反的音讯字符串,则这两个应用顺序前往相反的音讯值。该音讯不断维持被注销形态,直到Windows会话完结。当多个应用顺序必需解决同一音讯时才应用RegisterWindowMessage函数。在一个窗口类范畴内发送公有音讯时,获取调配给一个字串标识符的音讯编号 &C000(49152) 到 &FFFF(65535)之间的一个音讯编号。零象征着出错。

https://docs.microsoft.com/en-us ... isterwindowmessagea
字符串罕见有:
TaskBarCreated 普通用于Explorer解体后的托盘图标重建
SHELLHOOK 配合RegisterShellHookWindow可用于拦挡零碎窗口创立等
TaskbarButtonCreated 在win7里的义务按钮创立

RegisterShellHookWindow
https://docs.microsoft.com/en-us ... stershellhookwindow

开始拦截
  1. .版本 2

  2. .子程序 开始拦截

  3. MsgNum = RegisterWindowMessage (“SHELLHOOK”)
  4. .如果真 (MsgNum = 0)
  5.     信息框 (“注册shell hook 失败”, 0, , )
  6.     返回 ()

  7. .如果真结束
  8. RegisterShellHookWindow (取窗口句柄 ())
  9. ' 窗口子类化
  10. SetRet = SetWindowLong (取窗口句柄 (), -4, 到整数 (&NewProc))
复制代码
窗口子类化
  1. .版本 2
  2. .支持库 iext

  3. .子程序 NewProc, 整数型
  4. .参数 Hwnd, , , 这个句柄是程序本身的句柄
  5. .参数 uMsg, , , 用户的消息识别类型
  6. .参数 wParam, , , 事件类别
  7. .参数 lParam, , , 拦截的系统的窗口 的句柄
  8. .局部变量 Tid
  9. .局部变量 i

  10. ' 只针对某一个特定顶级窗口hook
  11. .如果真 (lParam = 取指定窗口句柄 (“无标题 - 记事本”))
  12.     .判断开始 (wParam = 1)  ' 顶级窗口的创建’
  13.         GetWindowThreadProcessId (lParam, Tid)
  14.         .如果真 (Tid ≠ 0)
  15.             i = 超级列表框1.插入表项 (, “窗口创建”, , , , )
  16.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
  17.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
  18.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
  19.             超级列表框1.保证显示 (i)

  20.         .如果真结束

  21.     .判断 (wParam = 2)  ' 顶级窗口的销毁’
  22.         GetWindowThreadProcessId (lParam, Tid)
  23.         .如果真 (Tid ≠ 0)
  24.             i = 超级列表框1.插入表项 (, “窗口销毁”, , , , )
  25.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
  26.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
  27.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
  28.             超级列表框1.保证显示 (i)

  29.         .如果真结束

  30.     .判断 (wParam = 32772)  ' 顶级窗口切换
  31.         GetWindowThreadProcessId (lParam, Tid)
  32.         .如果真 (Tid ≠ 0)
  33.             i = 超级列表框1.插入表项 (, “窗口切换”, , , , )
  34.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
  35.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
  36.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
  37.             超级列表框1.保证显示 (i)

  38.         .如果真结束

  39.     .默认
  40.     .判断结束
  41. .如果真结束
  42. 返回 (CallWindowProc (SetRet, Hwnd, uMsg, wParam, lParam))
复制代码




游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

快捷回复 【不要灌水喔,臭宝!】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则