爱内涵易语言论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

快捷登录

在线
客服

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

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

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

[复制链接]

1766

主题

1852

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
ShellHook是什么?当一个窗口创立、激活、封闭时,explorer总是能够捕捉相应的音讯,并更新义务栏上,就是经过ShellHook完成的。本课完成了对零碎一切顶级窗口的拦挡,和指定窗口的拦挡。
3 k+ V) _' ?) `2 m; b
( {+ ?( i. |6 M+ C- t# jRegisterWindowMessage
! w% D( o! a# URegisterWindowMessage函数定义一个新的窗口音讯,保障该音讯在零碎范畴内是惟一的。通常调用SendMessage或许PostMessage函数时,能够应用该函数前往的音讯值。  |1 K. D( U! R% J/ V/ b4 ~

# a8 R7 Y* R/ y; Y) [正文:! L; h) q  ]0 [) U+ H/ u5 F# {
RegisterWindowMessage函数通罕用于为两个协作应用顺序之间的通讯注销音讯。  若两个不同的应用顺序注销了相反的音讯字符串,则这两个应用顺序前往相反的音讯值。该音讯不断维持被注销形态,直到Windows会话完结。当多个应用顺序必需解决同一音讯时才应用RegisterWindowMessage函数。在一个窗口类范畴内发送公有音讯时,获取调配给一个字串标识符的音讯编号 &C000(49152) 到 &FFFF(65535)之间的一个音讯编号。零象征着出错。
" ]: Y$ _6 h  }3 q9 H1 k( q+ @$ K* ]8 D
https://docs.microsoft.com/en-us ... isterwindowmessagea
6 K4 H- r- w# |1 \; K+ |字符串罕见有:; d1 k- d% ?4 l6 e6 D+ O# x
TaskBarCreated 普通用于Explorer解体后的托盘图标重建8 j# ]' U$ P6 O( Y8 V; O
SHELLHOOK 配合RegisterShellHookWindow可用于拦挡零碎窗口创立等
1 J8 U" q; k7 c. H4 `+ _TaskbarButtonCreated 在win7里的义务按钮创立
8 g( d, n' n5 [- `' c
  t3 S9 ?, R& w7 hRegisterShellHookWindow
0 Q* m9 d* K: u% o: F/ qhttps://docs.microsoft.com/en-us ... stershellhookwindow4 @2 s( L+ u$ J  }4 p7 Q
, L3 @) t: s3 u' {& @' H
开始拦截
  1. .版本 27 e; j: [4 @4 j/ l2 ]; l* [

  2. 5 o0 Z0 G0 J8 M2 l% E
  3. .子程序 开始拦截3 I* E! ~% ?# _8 H9 I$ C
  4. ) p4 m( u) L# H/ Y3 d
  5. MsgNum = RegisterWindowMessage (“SHELLHOOK”)! D$ ^1 W! P/ H& I2 Q
  6. .如果真 (MsgNum = 0)7 |. ~4 ^+ D/ V
  7.     信息框 (“注册shell hook 失败”, 0, , )
    ; a( [8 w4 h4 q+ K" K: s
  8.     返回 ()
    9 Z( T2 r9 _3 k( [; S

  9. 5 A7 E* h1 [( U7 g. F: v1 S
  10. .如果真结束
    % H+ E  n0 g; n' e# C, N, {
  11. RegisterShellHookWindow (取窗口句柄 ())
    ( ?9 ?. n% ^) z7 s
  12. ' 窗口子类化
    3 H' ]: Z8 \% s  m- Q  l- |
  13. SetRet = SetWindowLong (取窗口句柄 (), -4, 到整数 (&NewProc))
复制代码
窗口子类化
  1. .版本 2/ l0 W" G. I  o0 m, E0 s9 e
  2. .支持库 iext3 k' R6 t: D" j) L% T. O- n
  3. $ ^$ P/ C$ a. i6 ]" X6 ?/ C
  4. .子程序 NewProc, 整数型
    / ~4 T7 W7 k: f/ \
  5. .参数 Hwnd, , , 这个句柄是程序本身的句柄
    ; B4 f% {" j' Z2 M
  6. .参数 uMsg, , , 用户的消息识别类型
    / ~2 O, E( Y- p: k' m
  7. .参数 wParam, , , 事件类别  J( Z4 {. z6 Z5 s: [
  8. .参数 lParam, , , 拦截的系统的窗口 的句柄+ z3 Z8 w( M# z* K8 I, r
  9. .局部变量 Tid
    / z4 ~" N6 i6 A
  10. .局部变量 i
    ' _- W8 @% {$ @

  11. 1 a) s2 D( a% ]6 p$ `
  12. ' 只针对某一个特定顶级窗口hook
    , s" l" `, @3 Q, P! n0 B7 h$ W
  13. .如果真 (lParam = 取指定窗口句柄 (“无标题 - 记事本”))
    3 G, Z; }* J: z6 b
  14.     .判断开始 (wParam = 1)  ' 顶级窗口的创建’& t# `! Z) R+ e  X! N$ x7 u' I
  15.         GetWindowThreadProcessId (lParam, Tid)
    ( x: ~* G' o7 N7 \( x  v
  16.         .如果真 (Tid ≠ 0)
    ; A# C( s4 W* j8 F8 a5 l4 |% Z* I
  17.             i = 超级列表框1.插入表项 (, “窗口创建”, , , , )
    ( o! y+ a) v) @' {% d" _. ^
  18.             超级列表框1.置标题 (i, 1, 到文本 (lParam))$ s4 k$ x+ J8 K
  19.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    , Q: ]" c9 G0 q+ \6 ^& L
  20.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))# D( f: W  f$ d! s' E8 G
  21.             超级列表框1.保证显示 (i)  q% r/ T, Z. N9 u6 t
  22. ' \; I( j+ u9 ^2 @; r$ H
  23.         .如果真结束
      ~6 C6 c) `: \- p# b1 h0 b& ^

  24. " @* m0 @9 j; o$ `
  25.     .判断 (wParam = 2)  ' 顶级窗口的销毁’# T) W( Z* v0 V: e3 d. O0 ~
  26.         GetWindowThreadProcessId (lParam, Tid). d/ v/ {0 ^9 x& a* e: d  l$ r/ j+ X
  27.         .如果真 (Tid ≠ 0)) c) g; Q( l7 {$ E* O2 I( U
  28.             i = 超级列表框1.插入表项 (, “窗口销毁”, , , , )
    5 d# K  d  B$ }/ e9 @7 U: d/ _& u
  29.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
    : a& V- Y4 i6 k% z
  30.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    / D. _" _6 K& S/ K8 `1 s9 c
  31.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))5 T" \2 U; j( b$ o! i
  32.             超级列表框1.保证显示 (i)6 C4 r2 w0 O. ~

  33. + K0 Q6 r. T. U$ r" _( l% v- {/ L
  34.         .如果真结束5 V' H, Y. D6 l$ ?8 H5 u
  35. : G% m2 D- ^/ n+ b
  36.     .判断 (wParam = 32772)  ' 顶级窗口切换
    & F2 d" i. _7 G# F. J+ x
  37.         GetWindowThreadProcessId (lParam, Tid)3 h; a# S0 o4 C. B# {3 }- Q1 _1 j
  38.         .如果真 (Tid ≠ 0)
    ! A8 k( w# }8 d+ ^& [0 J( z
  39.             i = 超级列表框1.插入表项 (, “窗口切换”, , , , )/ Q" V3 V6 p" ~) P4 t! s
  40.             超级列表框1.置标题 (i, 1, 到文本 (lParam))# Q7 Z) w' C2 k3 f+ b( y
  41.             超级列表框1.置标题 (i, 2, 到文本 (Tid))
    8 K, E# N) G, R1 e
  42.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))! q; U6 H1 O+ j* c
  43.             超级列表框1.保证显示 (i)5 `( S$ v8 D: H& {* [! Z

  44. * n4 F1 `, e5 C9 d  c( F- }
  45.         .如果真结束, l# b6 H- {1 W4 B' e6 H! Y* ~

  46. ) W+ X5 k% X! v8 @
  47.     .默认
    3 q! f9 X" Q: f5 z( W' r& i
  48.     .判断结束3 \7 i4 s: J' M( i
  49. .如果真结束
    . Z" C. V" \8 A/ h& u
  50. 返回 (CallWindowProc (SetRet, Hwnd, uMsg, wParam, lParam))
复制代码

. ^( s5 {! ]& d+ i# [1 I7 K8 O

5 E; K. ?' f' i3 u( v, K/ ^# D: b, A/ }5 d4 T( a& a% u4 f+ I. p6 |
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2022-1-18 06:56 , Processed in 0.080835 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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