爱内涵易语言论坛

 找回密码
 立即注册

在线
客服

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

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

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

[复制链接]
avatar

1767

主题

1853

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
开始截获
  1. .版本 2! K  A0 e2 A- B

  2. ! q9 \: Y9 V3 x9 `" m
  3. .子程序 开始截获, 逻辑型
    ! _: c" K/ n$ ]0 h
  4. .参数 窗口句柄
    0 d/ s+ O) X1 _& C' h
  5. .局部变量 hmod, 整数型
    - n. x4 M! j6 A* k7 z0 Q; L
  6. .局部变量 lpProc, 子程序指针1 a; `  _# o6 E0 U6 G
  7. .局部变量 ThreadID, 整数型
    , c  {$ N: a7 T5 c- Q
  8. .局部变量 hHook, 整数型
    ' t# z! r6 ]+ N$ Z9 y! p+ j

  9. - L3 N& m1 T- v# Y4 o  O
  10. .如果真 (窗口句柄 = 0)
    5 U4 n  M& y( @5 Z, F/ J
  11.     返回 (假)
    , y) }6 b0 L7 I) H# G9 t
  12. .如果真结束
    - Z5 b4 H# L4 @8 u" d
  13. .如果真 (GetPropA (窗口句柄, #prop) ≠ 0)
    ) V* t% |" _6 ]3 r! K* d! m& F4 H0 r& ^
  14.     ' 不等于0说明已经加载过钩子了
    # g- c5 i# E$ |1 F; m) T; e
  15.     返回 (假)3 u1 C9 |7 q2 @7 I7 B6 g9 ~: p- q
  16. .如果真结束0 D  X& x) W. E, l0 k
  17. ' 第一步  获取 Hookdll的 句柄
    ) t; C! X; m8 h9 ~; O
  18. hmod = LoadLibraryA (取运行目录 () + “\msghook.dll”)
    $ o4 e4 Q# \4 f* d
  19. ' 第二步  获取GetMsgProc 这个回调函数的 指针" L. c$ ]  C1 Y2 h
  20. lpProc = GetProcAddress (hmod, “GetMsgProc”)/ T6 u2 C7 M* \! X5 M2 L
  21. ' 第三部 获取截获窗口的线程ID
    , s# o+ _' W/ h8 N0 d9 w) f
  22. ThreadID = GetWindowThreadProcessId (窗口句柄, 0)
    7 c' S+ n  U0 |# C5 ~( \
  23. ' 给指定的窗口安装消息钩子,该窗口在收到postMessage的消息后会自动加载钩子函数所在的DLLmsghook.dll
    . g. p$ {( t. a9 Q2 f7 F+ ~
  24. hHook = SetWindowsHookExA (#WH_GETMESSAGE, lpProc, hmod, ThreadID)
    4 g$ @6 g) z0 {. g8 T# }7 E
  25. ' 释放dll3 n3 k* Y: [+ D$ z! z2 B- v  ~  O
  26. FreeLibrary (hmod)
    5 ^1 q5 }6 e$ i( o
  27. ' 开始给窗口发送消息,通知msghook.dll子类化窗口过程,并传递钩子句柄过去3 e8 I, }$ K2 h, W4 k% n5 Z
  28. PostMessageA (窗口句柄, #MyMsgClass, 1, hHook)* `: Y5 h) ]5 g( S
  29. 返回 (hHook ≠ 0)
复制代码

( d: U$ c8 Y% ^: ~5 z  `! }
, {: s( I. q! b7 `- J5 \! h结束截获
  1. .版本 2
    ! |! M2 o* S) C1 U  s: u

  2. 4 o4 z! k) t. d( K) p  F# g  l7 B5 J4 N) A
  3. .子程序 结束截获, 逻辑型3 W$ {/ ]; {  \2 i- {
  4. .参数 窗口句柄, 整数型
    / V) l! _( c; ]4 q* F' N
  5. .局部变量 hHOOK, 整数型
    ) L/ C4 U( `7 {0 k# w$ |

  6. * r( }& w. u) h* K' @
  7. .如果 (窗口句柄 = 0); i. K6 }1 M3 _' p) ~
  8.     返回 (假)) j$ @8 `6 w/ X/ K
  9. .否则' M( w; N9 g. K/ G( `' d6 @6 U
  10. 2 r7 _0 U9 k$ d: `5 E0 T
  11. .如果结束
    # C4 o% x$ A% ?& [7 J  u+ q
  12. ' 取回钩子的句柄
    1 W! G$ N. v$ F# q! N5 V
  13. hHOOK = SendMessageA (窗口句柄, #MyMsgClassHook, 0, 0)9 y# u1 m3 X1 ~5 W( [+ C
  14. .如果真 (hHOOK = 0)
    0 d3 m1 y8 F( j: [# e
  15.     ' 0说明窗口已经关闭了
    $ M6 f7 t5 C8 a" t! n
  16.     返回 (真)
    . f; T& ]! J) W! n2 j7 g5 T
  17. .如果真结束8 L/ s9 g# c& m
  18. ' 通知窗口截获结束,恢复窗口过程0 _0 X) b8 B% S- G' W% _
  19. SendMessageA (窗口句柄, #MyMsgClass, 0, 0)
      L9 @" @" V* c7 b  f$ r
  20. 返回 (UnhookWindowsHookEx (hHOOK))
复制代码
1 Y! j) {7 O7 H4 R" d  [
: s& R. q4 C' V! M
主程序调用开始截获
  1. .版本 2
    " H+ m( s- c7 Q' k) s
  2. # q8 }( P* [% v0 L7 P9 H: }
  3. .程序集 窗口程序集_启动窗口- D$ A, S1 }7 Y7 {! K
  4. 3 k, p8 ~& K( F+ z
  5. .子程序 _按钮1_被单击
    & Y  R6 S: ?% e& ^+ G
  6. .局部变量 hwnd4 o- x  G# g9 t! j  b2 m
  7. ! P" p1 q% Y$ D' A! b
  8. hwnd = 取指定窗口句柄 (“无标题 - 记事本”)
    1 M  A3 ^' ?# e% H
  9. .如果真 (hwnd = 0)1 @  z) V) X  H" i
  10. 信息框 (“请打开一个空白记事本”, 0, , )( M2 d6 \+ W! y; ~: `
  11. 返回 ()
    0 Y5 r  w% U* o* V; Z; x) }

  12. ( l+ q. T. \8 g8 v' ?+ D
  13. .如果真结束
    # L6 W0 @0 p- z; `6 d! y8 B
  14. .如果真 (开始截获 (hwnd))
    ! n" ?1 `0 l  ?. Z
  15. 信息框 (“开始截获消息”, 0, , “成功”)7 s5 V4 D6 D" T2 D5 |9 G& {4 h9 B
  16. .如果真结束
    / u$ e' B' L) a9 ~5 \7 L# P0 i

  17. " t2 @, X2 w" m5 K4 l
  18. .子程序 _按钮2_被单击
    $ o' |. w- U; V) _9 q
  19. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”)), ]# C4 F8 M- b- M5 h2 X/ G  r
  20. .子程序 取指定窗口句柄, 整数型% s6 G5 E8 p6 ^8 s  ?( I4 K
  21. .参数 窗口标题, 文本型
    + e+ q& l$ `' B; C) ~6 [
  22. 返回 (FindWindowA (字符 (0), 窗口标题))) i! x/ h0 o/ f2 z
  23. .子程序 __启动窗口_将被销毁6 t% S1 Q/ h$ d5 o+ \7 w8 e$ n
  24. % A$ v% }% D4 _7 @+ F
  25. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
复制代码
5 T' T. ~# `, ~

: i, W4 |5 f$ V# M0 w3 C& T+ k3 n* G% X: Y- s6 ?% a( s

( }+ a5 p2 O( M) b# U- I6 j
- R4 |. ^4 @+ e; j% z4 i
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2022-7-6 10:00 , Processed in 0.048220 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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