爱内涵易语言

 找回密码
 立即注册

在线
客服

会员永久免费学习服务时间: 9:00-24:00

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

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

[复制链接]

1044

主题

1116

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
开始截获
  1. .版本 2" ^1 {, Z2 R8 K
  2. & W; w2 s1 Y4 \
  3. .子程序 开始截获, 逻辑型- V' B% h" L" K& [% f  G1 \* |
  4. .参数 窗口句柄
    + T$ @* W; i0 c# }' s/ d
  5. .局部变量 hmod, 整数型
    0 d/ D! C3 M! X+ n2 z- A0 Q" J. L
  6. .局部变量 lpProc, 子程序指针5 ]3 r, Q. k4 h) q: j/ m$ N
  7. .局部变量 ThreadID, 整数型* F# |! n3 w( r% g+ ~5 ?7 J$ a
  8. .局部变量 hHook, 整数型" c6 d6 F0 w# @: F
  9. 8 D) L8 Q: ]  h4 b) c, s
  10. .如果真 (窗口句柄 = 0)
    - {/ G8 d* A4 n; `" T  W$ C
  11.     返回 (假)
    " i0 i$ G; _0 y& v
  12. .如果真结束
    " N8 z/ l8 C8 C3 o% w0 \; L
  13. .如果真 (GetPropA (窗口句柄, #prop) ≠ 0)/ l% W# D+ r" {: R* O
  14.     ' 不等于0说明已经加载过钩子了
    7 T, l' [: x' F  c( J  h
  15.     返回 (假)3 o8 h' T7 i% s) \$ m" p; k6 \3 }
  16. .如果真结束
    . q" Q5 H! i5 {2 m8 z+ [
  17. ' 第一步  获取 Hookdll的 句柄: A. q% s, }! i! E
  18. hmod = LoadLibraryA (取运行目录 () + “\msghook.dll”)7 b: s2 d" F2 M* i
  19. ' 第二步  获取GetMsgProc 这个回调函数的 指针
    6 P2 d; K; q7 z5 B% C2 q1 }
  20. lpProc = GetProcAddress (hmod, “GetMsgProc”)
    5 L0 I% S+ z1 P
  21. ' 第三部 获取截获窗口的线程ID" P. T9 ?) F* D. f& u6 Q2 a: _
  22. ThreadID = GetWindowThreadProcessId (窗口句柄, 0)
    : _1 U4 I# ?/ W. C1 I. W, b4 v
  23. ' 给指定的窗口安装消息钩子,该窗口在收到postMessage的消息后会自动加载钩子函数所在的DLLmsghook.dll1 K; r( D( u" Y% r4 j5 t0 G
  24. hHook = SetWindowsHookExA (#WH_GETMESSAGE, lpProc, hmod, ThreadID)
    ' u1 e/ r" e' t2 C: J7 ]
  25. ' 释放dll
    ; \' D, Z5 |, G4 A! ?& O
  26. FreeLibrary (hmod)/ W. |6 u- [( S0 o: m" y& N* c
  27. ' 开始给窗口发送消息,通知msghook.dll子类化窗口过程,并传递钩子句柄过去" U9 J+ p, O& N
  28. PostMessageA (窗口句柄, #MyMsgClass, 1, hHook)9 ]8 u3 A+ _! }0 @" x; @
  29. 返回 (hHook ≠ 0)
复制代码

! o2 U9 ^" i4 y" r/ V6 c8 J1 }) r
( ~! U8 }, p( W5 z4 P4 G8 Q. X结束截获
  1. .版本 2! X8 T$ m9 ?  Z9 s, M  E2 Y

  2. - k: ]0 ^% c1 `" E7 p
  3. .子程序 结束截获, 逻辑型
    , H# g' O" g) K8 n5 A
  4. .参数 窗口句柄, 整数型
    ) C* @+ P, m% v% V$ q
  5. .局部变量 hHOOK, 整数型
      ]. s, W" j! ]7 U7 {2 O/ |4 p; u
  6. 6 ]+ M( c6 ]# n# t' ?1 ^
  7. .如果 (窗口句柄 = 0)
    $ O7 K+ J! x- h4 ^6 O6 {
  8.     返回 (假)
    8 M+ r/ k  h/ n
  9. .否则
    , j( h$ z" T( X/ P! y
  10. ' c2 S8 f. t  j1 e
  11. .如果结束
    # [* Y: o& V3 K+ y7 B, q
  12. ' 取回钩子的句柄' n3 Z/ i! n. J  ?+ y/ C
  13. hHOOK = SendMessageA (窗口句柄, #MyMsgClassHook, 0, 0)
    4 P* O0 y  V' Y  i$ f$ b
  14. .如果真 (hHOOK = 0)4 X* ~# W9 ?9 O9 |1 v
  15.     ' 0说明窗口已经关闭了" T" T$ m; ~% b, t
  16.     返回 (真)
    - h" z4 i0 K1 n8 F; q/ q2 ?5 g
  17. .如果真结束
    & i& r: Z7 \: x! o4 H4 B
  18. ' 通知窗口截获结束,恢复窗口过程7 I8 _! g/ P7 l
  19. SendMessageA (窗口句柄, #MyMsgClass, 0, 0)
    7 H- |8 A" n- @/ _. _' e
  20. 返回 (UnhookWindowsHookEx (hHOOK))
复制代码
0 x7 D& o/ S, X! G

0 @2 t2 g+ r, C  w7 c& n主程序调用开始截获
  1. .版本 2" ~& u& A3 o; ?
  2. & ~& l% C1 W9 q
  3. .程序集 窗口程序集_启动窗口1 O9 J+ C+ ~0 V) C0 R
  4. & m% e+ u5 G! p3 x+ N  g# N$ G0 [
  5. .子程序 _按钮1_被单击7 }1 a, q' b% f9 w6 ]) E
  6. .局部变量 hwnd- a+ K9 y, a- ?/ p; g
  7. ! y; Q# I$ k: x% W9 V" t) G& }
  8. hwnd = 取指定窗口句柄 (“无标题 - 记事本”)* m8 e1 e: o0 X3 b7 o; f4 ^  Y
  9. .如果真 (hwnd = 0)
    " ^, Y5 ^! a0 N& D% K0 G6 z
  10. 信息框 (“请打开一个空白记事本”, 0, , )' w) S" F! {5 t; T
  11. 返回 ()& j3 N; D# o" c

  12.   J, l3 E3 H- \- x6 Z1 {4 W* ~" x
  13. .如果真结束
    - X# n2 e  X1 A5 z+ |! B0 c7 t, J
  14. .如果真 (开始截获 (hwnd))
    / B1 @6 N* P0 y! K$ L
  15. 信息框 (“开始截获消息”, 0, , “成功”)/ f  Z  n- Z2 d* k  O8 N( y' ]- v
  16. .如果真结束
    ! f: _  d4 V; [: B

  17. 5 N- I  K: h& y/ T& h- s) T
  18. .子程序 _按钮2_被单击
    2 n- P! q( O: ~
  19. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
    4 q& q  H" v4 g3 z, C
  20. .子程序 取指定窗口句柄, 整数型# M6 k) x3 }( W( b  y
  21. .参数 窗口标题, 文本型
    ) I7 Q9 {+ |8 n: h2 I- F, q- K% I6 _" V
  22. 返回 (FindWindowA (字符 (0), 窗口标题))' u3 S3 ~- q" ~" \) F" \
  23. .子程序 __启动窗口_将被销毁
    : z2 ^$ N& O$ W/ K( d3 n

  24. + ^3 |3 b. {: Y) i- A' E
  25. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
复制代码

& \; w. R0 b! L$ ~/ \' B  I2 y3 e( d3 J- A' t  |4 `

, |& ]! g# R" W6 [8 g/ j
% m7 s3 ], p' Z' F( Y5 m0 Z- L1 j! C
! A1 T- K' ~! Z/ m' t& @
爱内涵论坛关注易语言与按键精灵的脚本辅助软件开发领域。                     VIP视频目录            VIP会员介绍            联系客服加入会员            爱内涵免费①群            爱内涵免费②群            爱内涵免费③群            自助加入会员
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【加入会员,永久免费学习】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

|网站地图

GMT+8, 2021-3-4 08:00 , Processed in 0.095088 second(s), 12 queries , Gzip On, File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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