查看: 741|回复: 1

易语言通过消息全局钩子截获外部窗口消息

[复制链接]

3123

主题

3123

帖子

50

积分

超级版主

Rank: 8Rank: 8

积分
50
发表于 2021-7-31 13:42:12 | 显示全部楼层 |阅读模式
开始截获
  1. .版本 2

  2. .子程序 开始截获, 逻辑型
  3. .参数 窗口句柄
  4. .局部变量 hmod, 整数型
  5. .局部变量 lpProc, 子程序指针
  6. .局部变量 ThreadID, 整数型
  7. .局部变量 hHook, 整数型

  8. .如果真 (窗口句柄 = 0)
  9.     返回 (假)
  10. .如果真结束
  11. .如果真 (GetPropA (窗口句柄, #prop) ≠ 0)
  12.     ' 不等于0说明已经加载过钩子了
  13.     返回 (假)
  14. .如果真结束
  15. ' 第一步  获取 Hookdll的 句柄
  16. hmod = LoadLibraryA (取运行目录 () + “\msghook.dll”)
  17. ' 第二步  获取GetMsgProc 这个回调函数的 指针
  18. lpProc = GetProcAddress (hmod, “GetMsgProc”)
  19. ' 第三部 获取截获窗口的线程ID
  20. ThreadID = GetWindowThreadProcessId (窗口句柄, 0)
  21. ' 给指定的窗口安装消息钩子,该窗口在收到postMessage的消息后会自动加载钩子函数所在的DLLmsghook.dll
  22. hHook = SetWindowsHookExA (#WH_GETMESSAGE, lpProc, hmod, ThreadID)
  23. ' 释放dll
  24. FreeLibrary (hmod)
  25. ' 开始给窗口发送消息,通知msghook.dll子类化窗口过程,并传递钩子句柄过去
  26. PostMessageA (窗口句柄, #MyMsgClass, 1, hHook)
  27. 返回 (hHook ≠ 0)
复制代码


结束截获
  1. .版本 2

  2. .子程序 结束截获, 逻辑型
  3. .参数 窗口句柄, 整数型
  4. .局部变量 hHOOK, 整数型

  5. .如果 (窗口句柄 = 0)
  6.     返回 (假)
  7. .否则

  8. .如果结束
  9. ' 取回钩子的句柄
  10. hHOOK = SendMessageA (窗口句柄, #MyMsgClassHook, 0, 0)
  11. .如果真 (hHOOK = 0)
  12.     ' 0说明窗口已经关闭了
  13.     返回 (真)
  14. .如果真结束
  15. ' 通知窗口截获结束,恢复窗口过程
  16. SendMessageA (窗口句柄, #MyMsgClass, 0, 0)
  17. 返回 (UnhookWindowsHookEx (hHOOK))
复制代码


主程序调用开始截获
  1. .版本 2

  2. .程序集 窗口程序集_启动窗口

  3. .子程序 _按钮1_被单击
  4. .局部变量 hwnd

  5. hwnd = 取指定窗口句柄 (“无标题 - 记事本”)
  6. .如果真 (hwnd = 0)
  7. 信息框 (“请打开一个空白记事本”, 0, , )
  8. 返回 ()

  9. .如果真结束
  10. .如果真 (开始截获 (hwnd))
  11. 信息框 (“开始截获消息”, 0, , “成功”)
  12. .如果真结束

  13. .子程序 _按钮2_被单击
  14. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
  15. .子程序 取指定窗口句柄, 整数型
  16. .参数 窗口标题, 文本型
  17. 返回 (FindWindowA (字符 (0), 窗口标题))
  18. .子程序 __启动窗口_将被销毁

  19. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
复制代码





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

使用道具 举报

1

主题

2

帖子

0

积分

正式用户

Rank: 1

积分
0
发表于 2023-8-30 04:54:29 | 显示全部楼层
感谢楼主分析
回复

使用道具 举报

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

本版积分规则