爱内涵易语言论坛

 找回密码
 立即注册

在线
客服

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

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

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

[复制链接]
avatar

1766

主题

1854

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
ShellHook是什么?当一个窗口创立、激活、封闭时,explorer总是能够捕捉相应的音讯,并更新义务栏上,就是经过ShellHook完成的。本课完成了对零碎一切顶级窗口的拦挡,和指定窗口的拦挡。
4 I0 V% Q9 D9 \7 \
; j+ M% s, e+ T9 h5 X3 rRegisterWindowMessage) z! a& A0 ~& _' a$ f7 m
RegisterWindowMessage函数定义一个新的窗口音讯,保障该音讯在零碎范畴内是惟一的。通常调用SendMessage或许PostMessage函数时,能够应用该函数前往的音讯值。
- o0 |. Z) h5 o& r2 M
9 U% S7 B! l$ Q: E; c正文:5 Q; c. k9 t7 ^1 R# i) T$ {
RegisterWindowMessage函数通罕用于为两个协作应用顺序之间的通讯注销音讯。  若两个不同的应用顺序注销了相反的音讯字符串,则这两个应用顺序前往相反的音讯值。该音讯不断维持被注销形态,直到Windows会话完结。当多个应用顺序必需解决同一音讯时才应用RegisterWindowMessage函数。在一个窗口类范畴内发送公有音讯时,获取调配给一个字串标识符的音讯编号 &C000(49152) 到 &FFFF(65535)之间的一个音讯编号。零象征着出错。
+ a- O7 U: C1 Y
! W# B- Q# W; {% ihttps://docs.microsoft.com/en-us ... isterwindowmessagea
9 e. \# Q  f/ O8 B4 J& u+ u字符串罕见有:& F  ]1 O! O. V: g7 I- z
TaskBarCreated 普通用于Explorer解体后的托盘图标重建
) y3 B. ?! G8 z( A0 ]+ y9 o( aSHELLHOOK 配合RegisterShellHookWindow可用于拦挡零碎窗口创立等
1 `* j5 e4 J" z$ h* jTaskbarButtonCreated 在win7里的义务按钮创立: w* _% T# q; j0 N/ [2 b8 n, ?& B. y

% p: T3 P+ E" R1 ZRegisterShellHookWindow/ j8 f; R% k, {, ]' t! o
https://docs.microsoft.com/en-us ... stershellhookwindow
) n+ G7 {% N& _4 V* {
% c( j5 r2 c6 n7 \* p1 X( @8 ]开始拦截
  1. .版本 2
    4 N' o- ~" [) V8 _6 h; y

  2. ; `4 k* [8 \. m, c* @
  3. .子程序 开始拦截1 B8 F7 U. S  j  J$ m. `: F% d
  4. / A$ k- g) g2 R; L' u( {3 m' P
  5. MsgNum = RegisterWindowMessage (“SHELLHOOK”)
    0 V; u8 G  V  ~' u( z' C6 O$ v0 r* [
  6. .如果真 (MsgNum = 0)
    # k1 \7 ?/ W' j. o2 s; M7 p; H
  7.     信息框 (“注册shell hook 失败”, 0, , )
    ) V4 O0 H. z: Z$ U+ ?4 q- r2 P
  8.     返回 (), E6 F' H& M/ K: j4 O: z5 {7 ~+ Z
  9. 5 t* k  r& \# g/ r2 H+ S
  10. .如果真结束, @9 P  B% g$ ~9 f* l
  11. RegisterShellHookWindow (取窗口句柄 ())
      M" Q3 l+ U2 w; Q  y- l' x
  12. ' 窗口子类化& X; N. b+ K( y
  13. SetRet = SetWindowLong (取窗口句柄 (), -4, 到整数 (&NewProc))
复制代码
窗口子类化
  1. .版本 2
    7 x$ O3 H8 `2 {9 Y
  2. .支持库 iext( _, s0 P2 l% a- v  S: y' X8 a2 S

  3. ( n! p  ^- c% n. w* F# B
  4. .子程序 NewProc, 整数型( c6 m1 x: c. A9 Y9 b
  5. .参数 Hwnd, , , 这个句柄是程序本身的句柄- D* k' n9 s2 j( \6 k( u
  6. .参数 uMsg, , , 用户的消息识别类型# X0 i4 t. C% D8 d4 n
  7. .参数 wParam, , , 事件类别
    4 z4 s$ K; f' e% P5 T
  8. .参数 lParam, , , 拦截的系统的窗口 的句柄" L+ D* U9 x2 z& D
  9. .局部变量 Tid
    . D7 m  r* X& _
  10. .局部变量 i7 @7 b3 H: b7 K4 }/ v" W* }8 n

  11.   r: L- k- o' d  v2 |  |
  12. ' 只针对某一个特定顶级窗口hook- H0 S* \3 @9 E. s  _: v
  13. .如果真 (lParam = 取指定窗口句柄 (“无标题 - 记事本”))
    7 Z7 K7 |" V) Z$ `* h& ]2 N' s. m
  14.     .判断开始 (wParam = 1)  ' 顶级窗口的创建’+ \$ U9 y  \; S0 B/ u
  15.         GetWindowThreadProcessId (lParam, Tid)+ v5 T2 t2 W" Z, Y) M7 X/ i0 a2 x
  16.         .如果真 (Tid ≠ 0)+ I( ?' t, z( O1 S5 \# x% l$ Q
  17.             i = 超级列表框1.插入表项 (, “窗口创建”, , , , )2 h/ u; [& G% o- V# h5 ~5 G5 h
  18.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
    8 ^( V- V# }! p6 e$ L$ a
  19.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    * h6 i% F! h5 `" C- P
  20.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
    & h0 d2 b4 R7 k5 y' N1 M
  21.             超级列表框1.保证显示 (i)
    ! z. }+ Z& F5 N
  22. - X8 M! m/ }, L  v2 ]2 N+ @+ y' t
  23.         .如果真结束8 y4 @$ S4 I, H: D
  24. 0 h/ f' p. C$ t" L! a7 l  N
  25.     .判断 (wParam = 2)  ' 顶级窗口的销毁’
    4 T. k2 {4 Z) Q, [
  26.         GetWindowThreadProcessId (lParam, Tid)
    + p2 M5 V( x5 m/ A' H
  27.         .如果真 (Tid ≠ 0)
    8 H/ i1 `: B; V5 E2 j; h4 R$ _
  28.             i = 超级列表框1.插入表项 (, “窗口销毁”, , , , )* g9 F5 Y1 @! s5 K3 f
  29.             超级列表框1.置标题 (i, 1, 到文本 (lParam))7 d  S% ~( B( U* @
  30.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
      E: z& I6 h6 O8 d! X, R
  31.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
    " F+ ]. G9 _$ W, V/ V+ s0 t
  32.             超级列表框1.保证显示 (i)
    " l& U) a- k/ N
  33. + }$ @3 n7 ^) Y$ O8 C
  34.         .如果真结束# E6 O( U( s) B% s
  35. - F5 a9 Y7 q7 Y! {8 z
  36.     .判断 (wParam = 32772)  ' 顶级窗口切换) S4 C1 r9 [3 }4 x$ T" e: P% a0 O
  37.         GetWindowThreadProcessId (lParam, Tid)  A1 u; u6 C8 h7 `( }( G
  38.         .如果真 (Tid ≠ 0)2 \! V: e6 `. ]& ^, B9 l
  39.             i = 超级列表框1.插入表项 (, “窗口切换”, , , , )
    " H& m5 a0 z$ D3 T% Z. L
  40.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
    0 e9 s9 N) f6 V4 {
  41.             超级列表框1.置标题 (i, 2, 到文本 (Tid))' u* t; n  f6 }( e0 q& d2 Y! |
  42.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
    ! F8 C7 V3 k. J& u" y$ @
  43.             超级列表框1.保证显示 (i)+ Y& V; f" T2 W) k$ \

  44. " q) K) d& X$ C) T1 ?8 K& v7 I
  45.         .如果真结束
    , G9 B& B2 D) v, Q
  46. 7 h5 p0 h) z  Y* ^
  47.     .默认
    9 }! y4 e' o- K) f  L
  48.     .判断结束
    . F/ j' n' q" D! ]7 J
  49. .如果真结束6 z, @- n3 C5 @, Y9 [
  50. 返回 (CallWindowProc (SetRet, Hwnd, uMsg, wParam, lParam))
复制代码

$ \3 r2 @3 _+ U! c# {2 Z* e7 z) g! m" O9 f( w0 H7 p
% L' i, D% t# T: ]) ~

9 W% |' x0 p' t3 d1 W! T
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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