爱内涵易语言论坛

 找回密码
 立即注册

在线
客服

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

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

易语言HOOK系统顶级窗口的创建销毁切换

[复制链接]
avatar

1767

主题

1853

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
ShellHook是什么?当一个窗口创立、激活、封闭时,explorer总是能够捕捉相应的音讯,并更新义务栏上,就是经过ShellHook完成的。本课完成了对零碎一切顶级窗口的拦挡,和指定窗口的拦挡。  B$ V" b* S+ d/ [/ ~$ Y  [

, V1 l7 s$ _" N  o9 TRegisterWindowMessage/ i: p8 H) Y) x( z# p+ W# a% c5 t
RegisterWindowMessage函数定义一个新的窗口音讯,保障该音讯在零碎范畴内是惟一的。通常调用SendMessage或许PostMessage函数时,能够应用该函数前往的音讯值。, B$ _/ B. u* o) S8 i7 g

6 a& o- `" H2 F$ e正文:
# D5 b5 U$ ]5 S( L. nRegisterWindowMessage函数通罕用于为两个协作应用顺序之间的通讯注销音讯。  若两个不同的应用顺序注销了相反的音讯字符串,则这两个应用顺序前往相反的音讯值。该音讯不断维持被注销形态,直到Windows会话完结。当多个应用顺序必需解决同一音讯时才应用RegisterWindowMessage函数。在一个窗口类范畴内发送公有音讯时,获取调配给一个字串标识符的音讯编号 &C000(49152) 到 &FFFF(65535)之间的一个音讯编号。零象征着出错。1 q! R% e5 F* ~6 }

- x: d6 p8 ^( {1 C5 Q7 I4 Hhttps://docs.microsoft.com/en-us ... isterwindowmessagea
+ M: \/ Y2 H5 X& Z& [+ v  \字符串罕见有:' x: `% c+ S  E) F0 }8 h" x! C
TaskBarCreated 普通用于Explorer解体后的托盘图标重建& b' P5 A2 R; v) F$ g# H
SHELLHOOK 配合RegisterShellHookWindow可用于拦挡零碎窗口创立等- v7 H3 s$ T4 e) b+ M( N  s
TaskbarButtonCreated 在win7里的义务按钮创立1 a/ ~) O& o4 N: L- ]0 l
9 U  ^7 r5 n0 ^. y6 b/ t, P: L
RegisterShellHookWindow
$ x$ M2 }9 B( f9 B: p# M2 O0 Nhttps://docs.microsoft.com/en-us ... stershellhookwindow- T7 Y8 E$ \# \/ x& m/ M, }9 F

5 H. a0 l8 v( _  r4 S开始拦截
  1. .版本 2/ i" E* [/ p" r/ E  L: ]
  2. # w0 [6 w6 B2 F  \9 L
  3. .子程序 开始拦截, J4 L% R! m7 |8 ]
  4. ( ?3 p! K" A- @8 _
  5. MsgNum = RegisterWindowMessage (“SHELLHOOK”)
    * B: J: R5 w+ f- p7 e
  6. .如果真 (MsgNum = 0)
    ) W# k6 c, A/ f
  7.     信息框 (“注册shell hook 失败”, 0, , )
    ) ?! o1 D* M6 s& S3 l5 R' ]6 \# A/ Q
  8.     返回 ()
    8 m* b1 S/ k- S
  9. " I6 K2 T4 `/ P
  10. .如果真结束$ M" L: H/ |/ C
  11. RegisterShellHookWindow (取窗口句柄 ())
    ! C" P9 A% O3 Q+ Z7 J' u* c$ u
  12. ' 窗口子类化) j6 ~  k" n6 q" O" _  T
  13. SetRet = SetWindowLong (取窗口句柄 (), -4, 到整数 (&NewProc))
复制代码
窗口子类化
  1. .版本 2
    & j' V9 b0 o- \5 V& r- q
  2. .支持库 iext
    # ^; G! ?2 r( j. o8 B
  3. $ [. C1 {4 D+ C! ]  I  V
  4. .子程序 NewProc, 整数型& Q. C/ o# t% K, F! f
  5. .参数 Hwnd, , , 这个句柄是程序本身的句柄8 J4 v' A$ l7 q4 m' t: K6 ^# R3 {
  6. .参数 uMsg, , , 用户的消息识别类型: I% [1 g2 J( [4 O4 D
  7. .参数 wParam, , , 事件类别
    6 r2 f1 k8 G" c2 {" g
  8. .参数 lParam, , , 拦截的系统的窗口 的句柄
    * t4 \* v( z+ E$ V
  9. .局部变量 Tid
    0 x, M- u( v) W4 x( \) X" a* ]
  10. .局部变量 i
    1 T( U! I- z; g- V$ t

  11. $ K% X/ \6 W% t- T* ^, U; X
  12. ' 只针对某一个特定顶级窗口hook
    / E9 G# h/ S. X' W6 |1 [: O9 T
  13. .如果真 (lParam = 取指定窗口句柄 (“无标题 - 记事本”))( |% W- H& l/ S! |8 Q- D$ j
  14.     .判断开始 (wParam = 1)  ' 顶级窗口的创建’
    0 v) x4 }% [" @! Q
  15.         GetWindowThreadProcessId (lParam, Tid)! X1 W$ q9 k5 y" R# P3 J3 D
  16.         .如果真 (Tid ≠ 0)( |9 }, e/ o9 f8 Y2 n
  17.             i = 超级列表框1.插入表项 (, “窗口创建”, , , , )
    0 ]  [" s% k# t$ k' _7 P. \
  18.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
    1 T' X. N6 O: v/ q, z
  19.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    ) M, ?8 X' V# r/ W! f! @
  20.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))) U+ X5 f$ u) A  J( H7 \
  21.             超级列表框1.保证显示 (i)
    8 o2 q/ M3 p( [. Y8 \$ k: O9 A
  22. ! m4 @  U3 W; b4 k# [
  23.         .如果真结束
    % H! U) h! a3 o' I( p3 A
  24. . N& ^8 k3 g. V' W' L4 ]
  25.     .判断 (wParam = 2)  ' 顶级窗口的销毁’# ]# t" D4 ^9 H) s
  26.         GetWindowThreadProcessId (lParam, Tid). l" d  f" H0 ?0 e9 Z. e
  27.         .如果真 (Tid ≠ 0)
    5 O& p( {7 _3 W) H' D
  28.             i = 超级列表框1.插入表项 (, “窗口销毁”, , , , )
    / ~/ z$ z8 I( G/ @8 X0 \! s2 S/ |3 J
  29.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
    ! B8 t8 G$ Q) J( l, P* U. Z6 ?
  30.             超级列表框1.置标题 (i, 2, 到文本 (Tid))9 a3 W2 N0 H- o$ [& e9 x
  31.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))1 z( c" O9 \; C$ z4 [" j
  32.             超级列表框1.保证显示 (i)! X0 M" c5 g& D& a
  33. * Q" z0 z/ C2 c* n) r+ J
  34.         .如果真结束4 E. k" _1 V, v! T5 J  g
  35. 5 R6 ~" U# _5 V9 S, r
  36.     .判断 (wParam = 32772)  ' 顶级窗口切换, W% F1 o/ D. u+ p! ]
  37.         GetWindowThreadProcessId (lParam, Tid)
    # V1 v  E# F4 W* a( ^- i! d5 o  [! @
  38.         .如果真 (Tid ≠ 0)
    8 E6 h0 g; J+ L/ G$ E( ]/ g6 `
  39.             i = 超级列表框1.插入表项 (, “窗口切换”, , , , )
    7 C2 R9 O, c, f, y: `! [1 G
  40.             超级列表框1.置标题 (i, 1, 到文本 (lParam))5 U% Q% T$ z% D
  41.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    1 B4 Y$ G" i7 o3 v
  42.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))  p7 O2 n& ?- G" ]; M3 m
  43.             超级列表框1.保证显示 (i)" m/ `5 f) b6 Y1 H" v
  44. 4 P! s4 V! l6 O* z" z* v
  45.         .如果真结束
    ' u. x& a) q9 R" f$ M8 J( s. D* ~
  46. : K1 Z8 l0 h8 G
  47.     .默认. I8 V! R# a* Z( |
  48.     .判断结束# i/ T  z* L% i8 Q7 w; j% }$ z$ C
  49. .如果真结束! f; L0 p) J% M1 c
  50. 返回 (CallWindowProc (SetRet, Hwnd, uMsg, wParam, lParam))
复制代码

# g" ~3 _1 m' \
+ a/ B# M" z: S) T1 S
" j" O! b1 _5 |: a* B  z( M) p8 G
. \+ q6 ]8 |" K3 \7 R3 ]1 M
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2022-7-5 18:08 , Processed in 0.048151 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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