|
马上注册,获取更多精彩内容!!!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ShellHook是什么?当一个窗口创立、激活、封闭时,explorer总是能够捕捉相应的音讯,并更新义务栏上,就是经过ShellHook完成的。本课完成了对零碎一切顶级窗口的拦挡,和指定窗口的拦挡。' N1 d0 y) f( l8 ?" }/ v
! d$ l% O( R. g; i
RegisterWindowMessage
) o8 O2 G8 k" G) W7 }" b* sRegisterWindowMessage函数定义一个新的窗口音讯,保障该音讯在零碎范畴内是惟一的。通常调用SendMessage或许PostMessage函数时,能够应用该函数前往的音讯值。
/ D) v* j5 L' t+ Z2 s; O4 |, f9 V
5 e7 E$ e7 m* r正文:8 v5 C4 w/ }" j3 p- _9 D) m3 r- j: x
RegisterWindowMessage函数通罕用于为两个协作应用顺序之间的通讯注销音讯。 若两个不同的应用顺序注销了相反的音讯字符串,则这两个应用顺序前往相反的音讯值。该音讯不断维持被注销形态,直到Windows会话完结。当多个应用顺序必需解决同一音讯时才应用RegisterWindowMessage函数。在一个窗口类范畴内发送公有音讯时,获取调配给一个字串标识符的音讯编号 &C000(49152) 到 &FFFF(65535)之间的一个音讯编号。零象征着出错。
q) i5 K% M# [, Z9 K- U* `5 P/ L$ U! r! r8 u8 ~( |; t( s+ u
https://docs.microsoft.com/en-us ... isterwindowmessagea
: u7 L# `2 ^9 a% ~2 B# x: N( H) }' ]字符串罕见有:
1 X, |5 P! M( w' i W" F2 XTaskBarCreated 普通用于Explorer解体后的托盘图标重建
0 M1 V8 j) O; m% Q) n# k: d9 pSHELLHOOK 配合RegisterShellHookWindow可用于拦挡零碎窗口创立等
/ n( Z- B$ T8 j' pTaskbarButtonCreated 在win7里的义务按钮创立, W- v1 Z* i1 k+ L7 W
. E2 O$ B# L7 \/ g& Q* g% @9 sRegisterShellHookWindow
; g6 {/ _* ?0 Y. V' _/ |1 thttps://docs.microsoft.com/en-us ... stershellhookwindow
& q$ D/ `8 ]3 u! l$ u& d
. n4 ^% `- E4 T+ E& ^( [% ]开始拦截- .版本 2
' S: h5 j+ g8 t8 Y' N4 R - $ I& d0 z2 |$ F, r
- .子程序 开始拦截1 ~! t$ c) r' _& Q! {% c0 s k; ?
- 6 v3 A6 g1 a4 [' } n r* P
- MsgNum = RegisterWindowMessage (“SHELLHOOK”)4 [) f. \' m. o/ T
- .如果真 (MsgNum = 0)
* e& |2 X) t+ k0 o - 信息框 (“注册shell hook 失败”, 0, , )
7 O+ v( A$ P6 I3 M* \1 b- e - 返回 ()
0 n) x- w: }! \& r7 O j - % r+ ~- X" H, Q4 E I- S2 X
- .如果真结束
$ q1 D$ r0 f9 J% D: P - RegisterShellHookWindow (取窗口句柄 ())
6 I/ x# F2 P! G9 Z5 V; ^/ [5 d/ \ - ' 窗口子类化# m- f5 s _8 }4 t
- SetRet = SetWindowLong (取窗口句柄 (), -4, 到整数 (&NewProc))
复制代码 窗口子类化- .版本 2
0 ~* K* v( T( Q! @8 g! h - .支持库 iext
4 t( i/ j( b9 V7 Q" I4 N5 l - 1 D: p7 ^& d* ?# ^: W) ]5 _
- .子程序 NewProc, 整数型
: e/ S$ m& ]; d5 E$ L! d9 P+ x, ]* d - .参数 Hwnd, , , 这个句柄是程序本身的句柄
5 l& e& p/ ^# f - .参数 uMsg, , , 用户的消息识别类型8 A @* {( i) n6 i1 H) M0 ?
- .参数 wParam, , , 事件类别
, w+ c0 w7 r( U$ V% U5 c# E0 c( w - .参数 lParam, , , 拦截的系统的窗口 的句柄2 k9 f1 Z* \. v. Z3 w& m) z% |& z
- .局部变量 Tid
0 I( Z p; n R* t0 R - .局部变量 i
* k" ?! ^! c5 R5 b - o- H) |- ` H6 _8 ~* i5 U6 \
- ' 只针对某一个特定顶级窗口hook
3 N$ s6 z# c) ]% ?# Q. x Q: u \ - .如果真 (lParam = 取指定窗口句柄 (“无标题 - 记事本”))/ h {7 X% ^4 d4 b9 L& J9 [. x7 L3 H
- .判断开始 (wParam = 1) ' 顶级窗口的创建’5 k4 X; H: _, C) v
- GetWindowThreadProcessId (lParam, Tid)
& z" |* R! c2 y* y - .如果真 (Tid ≠ 0)$ Z! z/ m) r: F% Z1 o
- i = 超级列表框1.插入表项 (, “窗口创建”, , , , )
7 }: R2 W/ k: M* p! \/ ^ - 超级列表框1.置标题 (i, 1, 到文本 (lParam))
0 w5 y% t6 @, ~0 P" Q - 超级列表框1.置标题 (i, 2, 到文本 (Tid))4 ?4 Q8 j- {9 e6 a Y
- 超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))/ p, v* `; s. |) P4 U. R
- 超级列表框1.保证显示 (i)4 i% v7 i% p. ^. K; O* z; ]
-
% I/ H! ]1 ], {4 D* p4 [) S* e) h - .如果真结束! K* `' O# X: ?+ V0 P( c/ ]: d
- - ?0 D9 I- @3 Q
- .判断 (wParam = 2) ' 顶级窗口的销毁’
3 T! _! e- F7 B) n; B - GetWindowThreadProcessId (lParam, Tid)
/ K6 i6 [: G3 X3 l& z( Q - .如果真 (Tid ≠ 0)
% O! H4 ?2 ^7 W - i = 超级列表框1.插入表项 (, “窗口销毁”, , , , )
7 i+ J3 {7 s! w- c5 N/ q - 超级列表框1.置标题 (i, 1, 到文本 (lParam))$ B5 D C' @3 {7 _
- 超级列表框1.置标题 (i, 2, 到文本 (Tid))* X+ ~' _4 S8 _/ d" k8 J1 i& u* ~
- 超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))* o8 l- t; \) c) o) Q
- 超级列表框1.保证显示 (i)' @6 T- |8 s- p5 H \) L$ O9 O
-
- T% \) E- O" N Y/ Q - .如果真结束/ K; n* E) w4 |% x* |
-
% Q- Z& t: k* c7 C5 m- Q; ?) a - .判断 (wParam = 32772) ' 顶级窗口切换
- L, |! S+ ]1 k: e \: s - GetWindowThreadProcessId (lParam, Tid)
) Q1 D6 [9 z- z! u1 T/ D - .如果真 (Tid ≠ 0)
+ y" s& @7 b$ g8 h! e2 T - i = 超级列表框1.插入表项 (, “窗口切换”, , , , )
! V# i+ |- H: M9 W! i/ s - 超级列表框1.置标题 (i, 1, 到文本 (lParam))4 g' `6 ~# Q# S% E
- 超级列表框1.置标题 (i, 2, 到文本 (Tid))0 m6 o5 e9 {$ q/ O+ ~2 b. C
- 超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))0 u. _* p, T5 \( p) {0 {% f
- 超级列表框1.保证显示 (i)
s1 s( |7 a0 c- [ -
2 k; h7 z, _, u j - .如果真结束. Z9 c+ N8 T* i$ v
- 2 q L8 o# d0 K- p8 [1 k* m9 J7 R' ]
- .默认
% X4 _* I* t& @+ ]4 F - .判断结束0 K7 A; U1 O/ l
- .如果真结束2 y9 L3 I& { C# T. X$ q$ J- |
- 返回 (CallWindowProc (SetRet, Hwnd, uMsg, wParam, lParam))
复制代码
/ O' F3 }8 X) q) [: [# {) D" m
. q6 ]7 D* [% N6 x y$ r) L4 h; q/ r# p% q0 i
9 [& R2 \/ I d
|
|