爱内涵易语言论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

快捷登录

在线
客服

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

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

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

[复制链接]

1766

主题

1852

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
开始截获
  1. .版本 2& P; v0 T  @9 `3 }" j
  2. - N" l5 w- i$ _% C3 p
  3. .子程序 开始截获, 逻辑型
    ( c& A4 l5 Q; l9 l: Y
  4. .参数 窗口句柄1 m0 }6 g8 U% I$ I+ N
  5. .局部变量 hmod, 整数型& R6 ]7 J4 ?1 o3 e2 o
  6. .局部变量 lpProc, 子程序指针& z; ^. u' F6 ~- m/ h2 U; c
  7. .局部变量 ThreadID, 整数型
    1 \3 B. B* y; D. x2 U' d# V+ U" o1 I
  8. .局部变量 hHook, 整数型
    , p* t: t( k% }+ H
  9. 5 f# V9 ^" i) U+ ~( ?9 x
  10. .如果真 (窗口句柄 = 0)
    " X+ u: {/ J# ?% h3 I; S
  11.     返回 (假): v, P9 {% X9 p# w, S  I) {
  12. .如果真结束+ g2 N' \( ~( X
  13. .如果真 (GetPropA (窗口句柄, #prop) ≠ 0)
    : R8 D$ }  M4 o9 v1 N: G
  14.     ' 不等于0说明已经加载过钩子了
    ) C4 L3 F% o- g
  15.     返回 (假)9 e  j, P# e& n2 j* a
  16. .如果真结束" L! |5 A6 Y; m$ Q: [7 h% c1 V
  17. ' 第一步  获取 Hookdll的 句柄9 |) Q- D" X# |- \2 r/ }
  18. hmod = LoadLibraryA (取运行目录 () + “\msghook.dll”)1 [) e, u* O8 G2 g  m* z+ Y* T
  19. ' 第二步  获取GetMsgProc 这个回调函数的 指针# ~! c% _: p0 D6 R- f
  20. lpProc = GetProcAddress (hmod, “GetMsgProc”)
    + N! }& @& U2 P* X2 \+ Q
  21. ' 第三部 获取截获窗口的线程ID
    9 W' a# s; o; U6 \5 f
  22. ThreadID = GetWindowThreadProcessId (窗口句柄, 0)
    4 v! q- |& ^. U9 C/ l. j! \! o
  23. ' 给指定的窗口安装消息钩子,该窗口在收到postMessage的消息后会自动加载钩子函数所在的DLLmsghook.dll
    + I7 O1 u- w8 G. x  v( m4 g
  24. hHook = SetWindowsHookExA (#WH_GETMESSAGE, lpProc, hmod, ThreadID)
    3 G7 L2 t/ Z# U$ [: N; G4 m
  25. ' 释放dll
    8 N- Y' M2 d4 \' ~4 D  N9 |- _
  26. FreeLibrary (hmod)
    2 `; C- o+ z; R3 ?# {$ R
  27. ' 开始给窗口发送消息,通知msghook.dll子类化窗口过程,并传递钩子句柄过去
    ; e$ p6 F0 [0 R# D9 H
  28. PostMessageA (窗口句柄, #MyMsgClass, 1, hHook)3 v7 C) F# x( u$ h1 f& v# q
  29. 返回 (hHook ≠ 0)
复制代码

( |! X' Y+ R, U( J! j
8 M3 h. d. z6 q( v% U5 v结束截获
  1. .版本 27 l, e: y( s+ m, _, ], O8 s; u

  2. & R# g- h$ O3 E3 g! z  @  e
  3. .子程序 结束截获, 逻辑型) x0 c! Y/ P" U! v% d  ^% k6 R
  4. .参数 窗口句柄, 整数型( ~( I) e- R  Z5 y5 a6 h
  5. .局部变量 hHOOK, 整数型8 ?' D6 i4 m& e% |. @

  6. 8 ]3 Q: F9 y( h0 D
  7. .如果 (窗口句柄 = 0)
    6 h! V3 I7 u4 I  O4 `  S2 a& a+ |
  8.     返回 (假)& T7 s* h$ j% }/ c: g4 X3 X
  9. .否则
    7 y+ I  S$ T1 J' S

  10. 0 d3 a6 m% f$ f9 B+ n: k- v
  11. .如果结束, T& l% A9 ?; w6 c! @/ ?4 Q
  12. ' 取回钩子的句柄
    * H/ E. ~  {$ J8 a
  13. hHOOK = SendMessageA (窗口句柄, #MyMsgClassHook, 0, 0)0 R+ p1 C6 u6 U+ N$ s
  14. .如果真 (hHOOK = 0)3 _! d% b+ i7 i( }- B6 ^& a
  15.     ' 0说明窗口已经关闭了
    7 W$ O$ K0 i( i9 }/ ~+ y
  16.     返回 (真)5 q- L4 g8 B1 Z* N2 U
  17. .如果真结束+ G. r2 }: {% f
  18. ' 通知窗口截获结束,恢复窗口过程5 \8 j/ ^+ B0 N* y0 o% I
  19. SendMessageA (窗口句柄, #MyMsgClass, 0, 0)
    5 m2 W: v& E6 I+ s  X! ?
  20. 返回 (UnhookWindowsHookEx (hHOOK))
复制代码
. z+ d1 k' K# A( W' \) h- @
+ R' W3 h  f; i- A- s
主程序调用开始截获
  1. .版本 2- l: U& A) {4 W) @8 `7 d% ]

  2. 4 L" g% V  y* l" J
  3. .程序集 窗口程序集_启动窗口5 f6 O/ q. F- h  `! r

  4. $ D: Y8 Z7 k& j& y- f2 ~
  5. .子程序 _按钮1_被单击
    . g, M  l( P; B0 \9 S
  6. .局部变量 hwnd
    7 S3 s+ N- b. s/ |! W. ]

  7. + k8 {3 {# M0 ~5 E! ^! x+ O9 E
  8. hwnd = 取指定窗口句柄 (“无标题 - 记事本”)
    7 O& R* ]. @+ d) G- O
  9. .如果真 (hwnd = 0)* B% i7 K/ F3 n' E
  10. 信息框 (“请打开一个空白记事本”, 0, , )
    ) |. J. B1 K  j  y: q0 F
  11. 返回 ()3 u5 Y( W6 y2 H3 H' D' N( Y8 [8 o
  12. $ S  X' o+ m( L
  13. .如果真结束9 b% Y, \5 n0 P8 m3 N9 f3 x: G
  14. .如果真 (开始截获 (hwnd))( q! Q+ n, f$ i9 N: v& D& a4 X
  15. 信息框 (“开始截获消息”, 0, , “成功”)
    - Y9 z5 O+ g# R# Q3 T
  16. .如果真结束
      r8 |0 j8 w; _8 n
  17. . N1 ^; L$ C  W1 R
  18. .子程序 _按钮2_被单击
    1 ^; G1 K& P' }( W
  19. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
    ( e- z2 T7 l; W4 C- j7 F
  20. .子程序 取指定窗口句柄, 整数型; c' o( B0 F5 d; u& Y- M
  21. .参数 窗口标题, 文本型
    " c3 s. f/ r( A
  22. 返回 (FindWindowA (字符 (0), 窗口标题)); u7 C8 e) M' b
  23. .子程序 __启动窗口_将被销毁3 V  y& `& \0 g" P1 }* A; I: B
  24. ! ]# q6 k" y! B8 }, ^* d3 D
  25. 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
复制代码
# C, L. n6 O) X
% M& o6 O& C( J# G: H: E: ~
2 `- x& z, R& B( ~7 f" V! D0 l

; i) u! n4 H# u2 r* [+ A, Y4 E. D6 R; z4 L+ z4 S) C7 d7 T4 Q
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2022-1-18 07:25 , Processed in 0.082552 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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