爱内涵易语言论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

快捷登录

在线
客服

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

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

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

[复制链接]

1762

主题

1848

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
ShellHook是什么?当一个窗口创立、激活、封闭时,explorer总是能够捕捉相应的音讯,并更新义务栏上,就是经过ShellHook完成的。本课完成了对零碎一切顶级窗口的拦挡,和指定窗口的拦挡。
  J& r8 [8 J% V2 B8 R
& {4 [% y. _5 m6 n; B$ d% @6 X: |RegisterWindowMessage+ Z) X# U/ G$ }, `
RegisterWindowMessage函数定义一个新的窗口音讯,保障该音讯在零碎范畴内是惟一的。通常调用SendMessage或许PostMessage函数时,能够应用该函数前往的音讯值。
% S% u. v- k3 V& a5 p, }, ~
: _, ?$ y. Q+ r1 @4 Y! h. i正文:
2 {3 i: s# U  E# B8 Z/ E, {RegisterWindowMessage函数通罕用于为两个协作应用顺序之间的通讯注销音讯。  若两个不同的应用顺序注销了相反的音讯字符串,则这两个应用顺序前往相反的音讯值。该音讯不断维持被注销形态,直到Windows会话完结。当多个应用顺序必需解决同一音讯时才应用RegisterWindowMessage函数。在一个窗口类范畴内发送公有音讯时,获取调配给一个字串标识符的音讯编号 &C000(49152) 到 &FFFF(65535)之间的一个音讯编号。零象征着出错。$ p/ l/ s8 ?6 M8 n+ [9 v& n

5 [/ N* C7 x! d% g: |https://docs.microsoft.com/en-us ... isterwindowmessagea
# n8 {' m9 g; \字符串罕见有:
7 z  M$ I: d: i: Q& L  X& |TaskBarCreated 普通用于Explorer解体后的托盘图标重建9 U1 K' }/ X/ {4 j5 I$ ]% m+ x
SHELLHOOK 配合RegisterShellHookWindow可用于拦挡零碎窗口创立等5 v" h9 K# E7 b% N
TaskbarButtonCreated 在win7里的义务按钮创立# I& u$ R% a% {* t. B
9 o' s; z! ^1 F( Y( r, `
RegisterShellHookWindow
/ l8 a& }3 t7 K) ehttps://docs.microsoft.com/en-us ... stershellhookwindow
; M2 e( l2 I7 r1 D6 n8 V' n8 s+ q$ @5 n+ K# A% W
开始拦截
  1. .版本 2" C7 W8 `$ J& ^$ H+ V; J& x
  2. ' x9 k1 E+ |5 ]! @) F/ ?
  3. .子程序 开始拦截# @, \9 W" h+ M4 \4 K

  4. 9 ^* \' e" T6 G1 b$ D5 Y+ A% B
  5. MsgNum = RegisterWindowMessage (“SHELLHOOK”)) s/ _: u  l; }7 f7 j; `
  6. .如果真 (MsgNum = 0)( H3 z+ k6 ?" L  V
  7.     信息框 (“注册shell hook 失败”, 0, , )6 {9 ?6 c# d% P% L. M& v- o
  8.     返回 ()$ i5 ~% {3 M" q' x

  9. ) Y- r. w* p5 `" N  O7 \; ~
  10. .如果真结束
    ; r4 T, ~& S7 n* ]8 z5 K
  11. RegisterShellHookWindow (取窗口句柄 ())' t' E& H) a* J# j
  12. ' 窗口子类化
    . |9 l' c; w3 i( G. P
  13. SetRet = SetWindowLong (取窗口句柄 (), -4, 到整数 (&NewProc))
复制代码
窗口子类化
  1. .版本 2, w' |4 T# m  |* v
  2. .支持库 iext! x% j% j3 w7 X' m/ z
  3. 4 g0 [; j6 `- B/ ~* I
  4. .子程序 NewProc, 整数型
    1 v. N1 B1 d) X
  5. .参数 Hwnd, , , 这个句柄是程序本身的句柄
    2 x  M. [' }" d; s3 c
  6. .参数 uMsg, , , 用户的消息识别类型$ h, Q! B8 b. d" c1 k0 b
  7. .参数 wParam, , , 事件类别
    : _0 u! O; e) F) @+ l4 g
  8. .参数 lParam, , , 拦截的系统的窗口 的句柄- V4 f/ e* K1 C
  9. .局部变量 Tid0 q* I( A, j  R$ z4 y  [
  10. .局部变量 i+ E! G+ K- T1 o7 o, @6 Z

  11. " G* q9 _; P/ T9 e
  12. ' 只针对某一个特定顶级窗口hook- B, D' o8 O" m/ t# x( P
  13. .如果真 (lParam = 取指定窗口句柄 (“无标题 - 记事本”))
    : B7 f$ J( A4 Y( A& ?3 |! E
  14.     .判断开始 (wParam = 1)  ' 顶级窗口的创建’1 c4 O, G+ l5 n- ^2 h
  15.         GetWindowThreadProcessId (lParam, Tid)
    2 U5 Y) a; |6 Z, ^/ b- e" O
  16.         .如果真 (Tid ≠ 0)3 ~* [( k( ~8 [, Z1 _3 s
  17.             i = 超级列表框1.插入表项 (, “窗口创建”, , , , )2 g/ s2 S# g8 f1 a; O
  18.             超级列表框1.置标题 (i, 1, 到文本 (lParam))- m4 Z* |9 B' `" Q' u! G
  19.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    * W7 W/ U6 M( j1 [3 y
  20.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
    9 e! m* y* ]6 P4 L, X4 o4 {" ?
  21.             超级列表框1.保证显示 (i)" P: X* T$ m, c9 j, F
  22. 1 ?+ J5 M  I- Q9 W( y: P
  23.         .如果真结束
    ) ]3 X% X: w5 {

  24. ) }" ~, @3 f; f& A$ \
  25.     .判断 (wParam = 2)  ' 顶级窗口的销毁’
    + t5 X7 `' ]1 |* ^3 E
  26.         GetWindowThreadProcessId (lParam, Tid)2 p3 ?. |  e3 y9 }: ?
  27.         .如果真 (Tid ≠ 0)3 D; E% C% A2 G# A6 c  ~
  28.             i = 超级列表框1.插入表项 (, “窗口销毁”, , , , )  _% T, f) d) L+ Q5 J+ \
  29.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
    : {. z+ K) V4 D  @0 E$ t
  30.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    6 f, }8 [) n4 {' d: W5 @
  31.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
    # A' ^& z  t. a- \- i; j: ?1 ^
  32.             超级列表框1.保证显示 (i)0 l* z0 @6 }8 R) O
  33. : h3 _7 ]' b5 Q& d; U1 x
  34.         .如果真结束
    / F6 i4 i" ?6 `
  35. 1 k# \4 T+ d) [' S: A( L
  36.     .判断 (wParam = 32772)  ' 顶级窗口切换: L2 `3 m# }& u+ Q' T$ Z0 P- D, |
  37.         GetWindowThreadProcessId (lParam, Tid)
    / |$ C. h* D& Y5 |# V& x
  38.         .如果真 (Tid ≠ 0)/ |& s4 m4 P0 u; e
  39.             i = 超级列表框1.插入表项 (, “窗口切换”, , , , )
    7 W7 \9 G  Q- ^
  40.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
    2 G, ^; D9 e  V
  41.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    & t, n# F0 j8 z- l3 ?- o0 e2 [2 a
  42.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))
    6 p9 E% J+ @& ?0 X6 I# u$ G
  43.             超级列表框1.保证显示 (i)
    8 R0 P) i5 |$ p* i8 s

  44. / w& U: D  c1 N
  45.         .如果真结束
    % z' P% v5 D) \( R5 k+ d
  46. 5 q5 S- [* q# q
  47.     .默认* }$ x' x( r7 }6 z* B2 V+ _
  48.     .判断结束
    7 X+ B1 [) @( L. V, ~
  49. .如果真结束3 w6 g  j, N4 B% U, Q4 {: ?) Q- g
  50. 返回 (CallWindowProc (SetRet, Hwnd, uMsg, wParam, lParam))
复制代码

2 V1 [( h* t( S! n8 |7 |6 c4 N, {4 e
, e5 w% }2 \, X( R: \- j! j# f$ m1 C- Y5 U+ g0 Z
. \' y% O, d: A' ~+ @. z( g
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2021-9-16 19:23 , Processed in 0.080927 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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