爱内涵易语言

 找回密码
 立即注册

在线
客服

会员永久免费学习服务时间: 9:00-24:00

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

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

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

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

[复制链接]

1034

主题

1106

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

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& ^( [% ]开始拦截
  1. .版本 2
    ' S: h5 j+ g8 t8 Y' N4 R
  2. $ I& d0 z2 |$ F, r
  3. .子程序 开始拦截1 ~! t$ c) r' _& Q! {% c0 s  k; ?
  4. 6 v3 A6 g1 a4 [' }  n  r* P
  5. MsgNum = RegisterWindowMessage (“SHELLHOOK”)4 [) f. \' m. o/ T
  6. .如果真 (MsgNum = 0)
    * e& |2 X) t+ k0 o
  7.     信息框 (“注册shell hook 失败”, 0, , )
    7 O+ v( A$ P6 I3 M* \1 b- e
  8.     返回 ()
    0 n) x- w: }! \& r7 O  j
  9. % r+ ~- X" H, Q4 E  I- S2 X
  10. .如果真结束
    $ q1 D$ r0 f9 J% D: P
  11. RegisterShellHookWindow (取窗口句柄 ())
    6 I/ x# F2 P! G9 Z5 V; ^/ [5 d/ \
  12. ' 窗口子类化# m- f5 s  _8 }4 t
  13. SetRet = SetWindowLong (取窗口句柄 (), -4, 到整数 (&NewProc))
复制代码
窗口子类化
  1. .版本 2
    0 ~* K* v( T( Q! @8 g! h
  2. .支持库 iext
    4 t( i/ j( b9 V7 Q" I4 N5 l
  3. 1 D: p7 ^& d* ?# ^: W) ]5 _
  4. .子程序 NewProc, 整数型
    : e/ S$ m& ]; d5 E$ L! d9 P+ x, ]* d
  5. .参数 Hwnd, , , 这个句柄是程序本身的句柄
    5 l& e& p/ ^# f
  6. .参数 uMsg, , , 用户的消息识别类型8 A  @* {( i) n6 i1 H) M0 ?
  7. .参数 wParam, , , 事件类别
    , w+ c0 w7 r( U$ V% U5 c# E0 c( w
  8. .参数 lParam, , , 拦截的系统的窗口 的句柄2 k9 f1 Z* \. v. Z3 w& m) z% |& z
  9. .局部变量 Tid
    0 I( Z  p; n  R* t0 R
  10. .局部变量 i
    * k" ?! ^! c5 R5 b
  11.   o- H) |- `  H6 _8 ~* i5 U6 \
  12. ' 只针对某一个特定顶级窗口hook
    3 N$ s6 z# c) ]% ?# Q. x  Q: u  \
  13. .如果真 (lParam = 取指定窗口句柄 (“无标题 - 记事本”))/ h  {7 X% ^4 d4 b9 L& J9 [. x7 L3 H
  14.     .判断开始 (wParam = 1)  ' 顶级窗口的创建’5 k4 X; H: _, C) v
  15.         GetWindowThreadProcessId (lParam, Tid)
    & z" |* R! c2 y* y
  16.         .如果真 (Tid ≠ 0)$ Z! z/ m) r: F% Z1 o
  17.             i = 超级列表框1.插入表项 (, “窗口创建”, , , , )
    7 }: R2 W/ k: M* p! \/ ^
  18.             超级列表框1.置标题 (i, 1, 到文本 (lParam))
    0 w5 y% t6 @, ~0 P" Q
  19.             超级列表框1.置标题 (i, 2, 到文本 (Tid))4 ?4 Q8 j- {9 e6 a  Y
  20.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))/ p, v* `; s. |) P4 U. R
  21.             超级列表框1.保证显示 (i)4 i% v7 i% p. ^. K; O* z; ]

  22. % I/ H! ]1 ], {4 D* p4 [) S* e) h
  23.         .如果真结束! K* `' O# X: ?+ V0 P( c/ ]: d
  24. - ?0 D9 I- @3 Q
  25.     .判断 (wParam = 2)  ' 顶级窗口的销毁’
    3 T! _! e- F7 B) n; B
  26.         GetWindowThreadProcessId (lParam, Tid)
    / K6 i6 [: G3 X3 l& z( Q
  27.         .如果真 (Tid ≠ 0)
    % O! H4 ?2 ^7 W
  28.             i = 超级列表框1.插入表项 (, “窗口销毁”, , , , )
    7 i+ J3 {7 s! w- c5 N/ q
  29.             超级列表框1.置标题 (i, 1, 到文本 (lParam))$ B5 D  C' @3 {7 _
  30.             超级列表框1.置标题 (i, 2, 到文本 (Tid))* X+ ~' _4 S8 _/ d" k8 J1 i& u* ~
  31.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))* o8 l- t; \) c) o) Q
  32.             超级列表框1.保证显示 (i)' @6 T- |8 s- p5 H  \) L$ O9 O

  33. - T% \) E- O" N  Y/ Q
  34.         .如果真结束/ K; n* E) w4 |% x* |

  35. % Q- Z& t: k* c7 C5 m- Q; ?) a
  36.     .判断 (wParam = 32772)  ' 顶级窗口切换
    - L, |! S+ ]1 k: e  \: s
  37.         GetWindowThreadProcessId (lParam, Tid)
    ) Q1 D6 [9 z- z! u1 T/ D
  38.         .如果真 (Tid ≠ 0)
    + y" s& @7 b$ g8 h! e2 T
  39.             i = 超级列表框1.插入表项 (, “窗口切换”, , , , )
    ! V# i+ |- H: M9 W! i/ s
  40.             超级列表框1.置标题 (i, 1, 到文本 (lParam))4 g' `6 ~# Q# S% E
  41.             超级列表框1.置标题 (i, 2, 到文本 (Tid))0 m6 o5 e9 {$ q/ O+ ~2 b. C
  42.             超级列表框1.置标题 (i, 3, 到文本 (取指定窗口标题 (lParam)))0 u. _* p, T5 \( p) {0 {% f
  43.             超级列表框1.保证显示 (i)
      s1 s( |7 a0 c- [

  44. 2 k; h7 z, _, u  j
  45.         .如果真结束. Z9 c+ N8 T* i$ v
  46. 2 q  L8 o# d0 K- p8 [1 k* m9 J7 R' ]
  47.     .默认
    % X4 _* I* t& @+ ]4 F
  48.     .判断结束0 K7 A; U1 O/ l
  49. .如果真结束2 y9 L3 I& {  C# T. X$ q$ J- |
  50. 返回 (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
爱内涵论坛关注易语言与按键精灵的脚本辅助软件开发领域。                     VIP视频目录            VIP会员介绍            联系客服加入会员            爱内涵免费①群            爱内涵免费②群            爱内涵免费③群            自助加入会员
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【加入会员,永久免费学习】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|爱内涵易语言 ( 浙ICP备19016710号-3 )|网站地图

GMT+8, 2021-3-2 10:42 , Processed in 0.111610 second(s), 12 queries , Gzip On, File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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