爱内涵易语言论坛

 找回密码
 立即注册

在线
客服

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

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

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

[复制链接]
avatar

1766

主题

1854

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
开始截获
  1. .版本 2
    0 a5 s  |/ n7 b# [7 R& f
  2. 4 I, m( r' x( {* B* z/ O
  3. .子程序 开始截获, 逻辑型) O; `& p9 Y7 |& w
  4. .参数 窗口句柄! u( T/ @. E+ U4 i
  5. .局部变量 hmod, 整数型
    4 W* L# ~( c1 @' t9 \
  6. .局部变量 lpProc, 子程序指针! d- ]' @: ]$ S" S
  7. .局部变量 ThreadID, 整数型$ G$ l8 W$ I8 |6 |: @6 f" M" g
  8. .局部变量 hHook, 整数型. C5 s" t* P7 D! K* D
  9. # G6 _1 ^$ d/ y+ k
  10. .如果真 (窗口句柄 = 0)
    $ t  ?0 b5 `( L( z' k* R
  11.     返回 (假)' j+ ~% c# j0 X  g& q' |
  12. .如果真结束6 ~( r6 Z9 V+ s- v6 X
  13. .如果真 (GetPropA (窗口句柄, #prop) ≠ 0)) a% P! G5 g0 W- Y% X$ k2 ~
  14.     ' 不等于0说明已经加载过钩子了0 {5 N% s# H  t" V
  15.     返回 (假)9 V5 Z" ?+ ?/ q4 ]5 u. _, ~8 Y$ a- o# P
  16. .如果真结束: v  o) W# u' |+ J0 y8 P
  17. ' 第一步  获取 Hookdll的 句柄
    1 a$ R' x0 j. w  o4 M
  18. hmod = LoadLibraryA (取运行目录 () + “\msghook.dll”)
    ) V0 u6 G& I) V$ W) X
  19. ' 第二步  获取GetMsgProc 这个回调函数的 指针* {" _2 e' h) z4 `$ L
  20. lpProc = GetProcAddress (hmod, “GetMsgProc”)
    + [, W* O" Z8 T+ v8 P* }9 W
  21. ' 第三部 获取截获窗口的线程ID3 w" n% F  u' y) t- P
  22. ThreadID = GetWindowThreadProcessId (窗口句柄, 0)! B8 ~6 X2 H& P" d+ E& D
  23. ' 给指定的窗口安装消息钩子,该窗口在收到postMessage的消息后会自动加载钩子函数所在的DLLmsghook.dll, o% t# {5 J" |3 r9 v( D1 E" \! ^  v: z
  24. hHook = SetWindowsHookExA (#WH_GETMESSAGE, lpProc, hmod, ThreadID)& }* G; ?1 R- R; n4 ]# h1 b8 N& H$ x
  25. ' 释放dll
    8 {+ e  r' \( a
  26. FreeLibrary (hmod); v0 Y$ p, V2 y& w% O
  27. ' 开始给窗口发送消息,通知msghook.dll子类化窗口过程,并传递钩子句柄过去1 T8 _0 G4 ~( t% c  `9 G0 R. J, I
  28. PostMessageA (窗口句柄, #MyMsgClass, 1, hHook)- ^, m- y, i9 R' Y! @+ D# }/ J
  29. 返回 (hHook ≠ 0)
复制代码
4 W1 T' X, T; ]# T' u* ^

% I( E6 U% g% c; E4 U4 W( t' z, u结束截获
  1. .版本 2
    + C$ p$ H# y7 f  ^* F2 l( v
  2. ) Z. r4 K! `+ R7 |: A/ R
  3. .子程序 结束截获, 逻辑型
    - W8 }* ?0 y/ s
  4. .参数 窗口句柄, 整数型4 ~( j0 G; k! O& t7 `& x* R
  5. .局部变量 hHOOK, 整数型
    ; W5 _  U# \" _
  6. ' e# U; X5 X; n# C3 l. \
  7. .如果 (窗口句柄 = 0). b# h9 Q& V0 Q% a2 q
  8.     返回 (假)
    , k8 a/ m+ D$ x0 }9 `* \
  9. .否则& n+ _* V7 U9 d; f3 q) _

  10. ( d2 K4 ~2 K5 ~% p$ `1 {3 O' V
  11. .如果结束
    ) A" Z: W# D# V3 [' O8 Q5 J8 Q- K
  12. ' 取回钩子的句柄# l. a/ n5 ^, h7 m: v
  13. hHOOK = SendMessageA (窗口句柄, #MyMsgClassHook, 0, 0)
    * [. K/ V( r( q# \* x8 s
  14. .如果真 (hHOOK = 0)
    & ^: b' e5 B" a6 b
  15.     ' 0说明窗口已经关闭了8 b" G6 R' z8 ~7 I
  16.     返回 (真)$ A" u6 i  A6 H' @0 M/ U! g' r
  17. .如果真结束7 T3 g" G3 V( J7 y1 Z$ P' X* y
  18. ' 通知窗口截获结束,恢复窗口过程2 }- ?! P3 R3 i( q1 g
  19. SendMessageA (窗口句柄, #MyMsgClass, 0, 0)
    & T! h- B" q$ _% T1 q" a+ o5 r
  20. 返回 (UnhookWindowsHookEx (hHOOK))
复制代码
) J6 k) _8 k& m
# h  R4 w6 B( R7 O9 r9 Y% v4 }2 p
主程序调用开始截获
  1. .版本 2
    1 R9 F) h% l( \$ `8 L8 D

  2. # I! E4 a& r6 u
  3. .程序集 窗口程序集_启动窗口0 B# e% x8 F! D/ P" M
  4. ' B( |1 D4 L5 i# `0 D1 W
  5. .子程序 _按钮1_被单击
      @) M" f  d( \) Z' R, g
  6. .局部变量 hwnd7 l, T8 W" X# }; N, K2 ]
  7. * x) D- C. `  F0 o: I
  8. hwnd = 取指定窗口句柄 (“无标题 - 记事本”)
    5 |8 [/ [# v% R4 m" L
  9. .如果真 (hwnd = 0)8 L# x. J* }. n
  10. 信息框 (“请打开一个空白记事本”, 0, , )3 \0 g- k9 ]' \0 a
  11. 返回 ()
    . Y- ]$ l; i$ B5 s

  12. 9 s; z) K6 o& l- R8 y
  13. .如果真结束
    , {/ u5 X" p0 Y7 b; {
  14. .如果真 (开始截获 (hwnd))! s& ^) F5 U2 R3 t$ e/ s
  15. 信息框 (“开始截获消息”, 0, , “成功”)0 s% R" p$ t5 A! E6 ]
  16. .如果真结束+ H% Q" t0 v0 h9 N% P

  17. 3 K& Y0 @% G' C6 I  r, O
  18. .子程序 _按钮2_被单击" n8 k" ~4 ]8 `, W$ ]
  19. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))5 \1 Y2 _0 m8 t1 x8 B; z) I
  20. .子程序 取指定窗口句柄, 整数型9 p& K5 v" R, L- K0 y& M
  21. .参数 窗口标题, 文本型' ]0 f; L4 k& C" Q
  22. 返回 (FindWindowA (字符 (0), 窗口标题))
    8 r3 V+ u; J( ?& `
  23. .子程序 __启动窗口_将被销毁
    1 z* a2 A! t0 O4 a- @* _4 p
  24. 2 I+ \8 t+ N# |% l9 Z
  25. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
复制代码

* F' V" ?2 Z/ f
/ G) P5 M9 T1 {: R+ y( M$ v& ?- |- S; e2 h1 R% W
7 B2 i7 S2 h0 v
. j! ]8 L/ b) {& ?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2022-12-5 23:56 , Processed in 0.043050 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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