爱内涵易语言论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

快捷登录

在线
客服

支付故障请联系客服服务时间: 9:00-24:00

选择下列客服马上在线沟通:

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

关注微信二维码
顶部
查看: 780|回复: 0

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

[复制链接]

1762

主题

1848

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

金币
9845
巨币
11642
积分
39494
发表于 2019-8-30 20:08:53 | 显示全部楼层 |阅读模式

马上注册,获取更多精彩内容!!!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
开始截获
  1. .版本 2) }6 Q+ x  y/ S4 F" O
  2. 1 u* n- f3 K9 F7 K, N" `
  3. .子程序 开始截获, 逻辑型' E8 A, z: ~! i' Q8 Z8 h# |1 [* [
  4. .参数 窗口句柄
    - ~  S" L, G0 g7 L
  5. .局部变量 hmod, 整数型' c3 D6 z6 l* l7 M4 J  `
  6. .局部变量 lpProc, 子程序指针& U4 y+ r9 L# @
  7. .局部变量 ThreadID, 整数型3 ^6 `8 p$ `5 g9 D
  8. .局部变量 hHook, 整数型
    ; }9 f0 F4 M* q. g+ l/ \* N7 \
  9. 5 u* V7 U: r; S7 p* q
  10. .如果真 (窗口句柄 = 0)
    , H. ?' Z3 Z! W* y+ J
  11.     返回 (假)  o! x. x4 o3 e8 t  z! d
  12. .如果真结束
    9 ?. W) N* |+ C1 A  ?
  13. .如果真 (GetPropA (窗口句柄, #prop) ≠ 0)
    * {/ k; t+ H+ V% F
  14.     ' 不等于0说明已经加载过钩子了& I9 D% J2 p( r
  15.     返回 (假); S9 C6 |% i+ V
  16. .如果真结束
    1 Z& X5 i2 j! t
  17. ' 第一步  获取 Hookdll的 句柄
    ) i3 G# I( `  l" h' B8 M. p
  18. hmod = LoadLibraryA (取运行目录 () + “\msghook.dll”)8 C" a5 v8 \$ k/ K+ o" g, y
  19. ' 第二步  获取GetMsgProc 这个回调函数的 指针) F$ R( i7 b& b- q
  20. lpProc = GetProcAddress (hmod, “GetMsgProc”)- B, i+ T0 |, _6 P, z  ~# ?0 h7 O/ A
  21. ' 第三部 获取截获窗口的线程ID
    6 y' a& B% T# J- `5 ~
  22. ThreadID = GetWindowThreadProcessId (窗口句柄, 0)& C5 P9 c4 l1 ^% v8 B  A
  23. ' 给指定的窗口安装消息钩子,该窗口在收到postMessage的消息后会自动加载钩子函数所在的DLLmsghook.dll6 C: b, T% D. K5 f% D4 m* J  c+ Q
  24. hHook = SetWindowsHookExA (#WH_GETMESSAGE, lpProc, hmod, ThreadID)
    / T0 m+ q: @/ ?
  25. ' 释放dll) n( p  m, [0 r* ^0 K6 T0 o
  26. FreeLibrary (hmod)+ g/ o- J( L: ]$ J' V8 v- a
  27. ' 开始给窗口发送消息,通知msghook.dll子类化窗口过程,并传递钩子句柄过去
    2 c4 [: ?! h& J, x, q7 {! b2 z) y
  28. PostMessageA (窗口句柄, #MyMsgClass, 1, hHook)7 t0 ?# H: z7 i! {' q- I) s5 x9 G
  29. 返回 (hHook ≠ 0)
复制代码
& a5 u% s; i' ?" x9 N6 P
1 C1 }+ ^3 P5 n6 Q
结束截获
  1. .版本 2
    ' |) y; M: V! C+ c% C' I! h
  2. 7 `9 d8 R/ w0 M  _! `5 E0 h8 D- o
  3. .子程序 结束截获, 逻辑型
    3 D% ^( a# V& `/ \
  4. .参数 窗口句柄, 整数型
    / w/ g5 m1 G. P. A: |3 l5 F
  5. .局部变量 hHOOK, 整数型. q7 D4 B: `) Z% `. n5 L

  6. ( x/ b7 _3 P2 e( [" e
  7. .如果 (窗口句柄 = 0)
    . e* r% [  ~$ K* l, M3 L* B3 W
  8.     返回 (假)0 z  b! p% t$ [# |6 `
  9. .否则
    ) d+ r0 s1 W8 R
  10. 8 `* z0 a* [  S) q$ y; Y, A
  11. .如果结束- h1 t% U! J$ ~" P6 ?: p
  12. ' 取回钩子的句柄
    ( |5 R) G9 A2 j$ {' h6 L
  13. hHOOK = SendMessageA (窗口句柄, #MyMsgClassHook, 0, 0)
    - C, d5 r" z- q/ S1 v3 N& [* _+ R
  14. .如果真 (hHOOK = 0)
    7 ~  M: z' E% I
  15.     ' 0说明窗口已经关闭了# \# t4 y2 ?: ~9 T, J
  16.     返回 (真)$ ^- ?: {1 n' y. g
  17. .如果真结束7 R' \# [) v' g/ `4 V/ n
  18. ' 通知窗口截获结束,恢复窗口过程
    ( Y9 ^8 ]7 W) Z" @; y
  19. SendMessageA (窗口句柄, #MyMsgClass, 0, 0)5 @0 {8 N" m( l' h
  20. 返回 (UnhookWindowsHookEx (hHOOK))
复制代码

9 P9 u! w, r9 b
: E% U( \. y: x  |( L( H% B主程序调用开始截获
  1. .版本 2
    $ e6 Y" m) v- i+ d

  2. ) K( u7 _3 }) O/ E3 K1 X; Y
  3. .程序集 窗口程序集_启动窗口7 ?- P; D! n  y; ]  k4 q

  4. ) @& e' K+ P9 p/ j
  5. .子程序 _按钮1_被单击5 ?  c0 v, ]& W! d( n8 s$ h6 w
  6. .局部变量 hwnd( P* \7 |4 D% [9 h/ Q* ?
  7. 6 {4 }/ u6 q8 f* S. c
  8. hwnd = 取指定窗口句柄 (“无标题 - 记事本”)6 z& e: w) f$ ^( C
  9. .如果真 (hwnd = 0)
    & k% [' `, b/ r' z* A2 f
  10. 信息框 (“请打开一个空白记事本”, 0, , )' k" L* a5 D7 @5 ^& b4 ]. o
  11. 返回 ()
    $ ^6 y* n+ x+ z% w

  12. . f. D8 Q6 u% c0 T/ V. j2 C& i( ~
  13. .如果真结束3 D5 d( |" ?* K4 u
  14. .如果真 (开始截获 (hwnd))4 E1 ]. o$ F9 x4 ?; ?& k
  15. 信息框 (“开始截获消息”, 0, , “成功”)
    0 e  {6 v) o( Q" U
  16. .如果真结束
    * S! R* p* p9 T& h: U7 k+ Q# w  `

  17. 5 l* o( h8 e: R# H  _1 y1 W
  18. .子程序 _按钮2_被单击7 s& T$ s  c( v- I8 n7 _: Y
  19. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
    . l0 E( T, M" M/ x) H) F, l$ A
  20. .子程序 取指定窗口句柄, 整数型
    9 a$ \6 \& j1 r1 _( f' g# K
  21. .参数 窗口标题, 文本型: J0 B7 m$ ^3 l' @9 \6 A6 L0 s  M
  22. 返回 (FindWindowA (字符 (0), 窗口标题))
    9 P% a# R1 b4 j9 @$ H
  23. .子程序 __启动窗口_将被销毁# _" X- P* ^  B3 r
  24. ) h+ T% V; A3 O* I0 f3 U
  25. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
复制代码

- `) w4 [* ]+ F4 ~! Y1 |5 [$ |2 ]2 _7 q% t$ g5 E+ b" G1 \# m6 R

2 y- q; E' G! {
0 V6 j6 }+ a' G+ W5 Y/ Q+ Y$ q, u  d& W1 w. `0 N' R
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|爱内涵易语言论坛 ( 浙ICP备19016710号-3 )

GMT+8, 2021-9-16 19:55 , Processed in 0.065595 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表