下沙论坛

 找回密码
 注册论坛(EC通行证)

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 4503|回复: 2
打印 上一主题 下一主题

EnableButton,大家自己看看是做什么的吧

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 6 j5 E! f- L5 M7 u; EnableButton ALL For bbs.xsclub.com9 n( ^+ }8 G- }% C' n- q5 ~ ; by 游侠无极限 $ q) P5 H5 ~- z;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - V2 r% C, T+ z/ S9 i7 N8 l' `; EndableButton.asm 6 L( q3 |- k* f @; 基于对话框资源 3 b5 R1 S6 e8 S* ~0 F/ L;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2 N. ]0 s: s! ?4 j .386 9 S) G6 v# ~% ^; _/ r8 Q- J .model flat, stdcall # _5 |3 }) ]5 P+ ^1 L option casemap :none & O( g9 k8 _# @+ I, k;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>! p, m7 A8 s: H' @. n7 _, ] ; Include 文件定义" d2 S% O4 ^& `' E& e ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # X- h% r# @- u6 G' b) f/ xinclude windows.inc % }' r) A# A, W8 V9 v% `) ` v1 k+ Vinclude user32.inc 6 p* i8 i& P4 b& {; Pincludelib user32.lib 7 R( \% g: G+ ginclude shell32.inc: a. L; F& e! n/ W' Y k includelib shell32.lib' ^$ ]+ P }' A9 \5 M5 i include kernel32.inc7 F7 E! k% ~* D. O includelib kernel32.lib! A$ q2 b% Z4 n0 k( X0 a! P ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> : c! m+ g% r' t8 z; Equ 等值定义 3 w- z6 G. ^. R. o( D;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> . C3 Z2 @2 F% m! A& [: AICO_MAIN equ 104 ;图标 3 O$ C2 L5 _) Q" p& E3 Q* jDLG_MAIN equ 101 ;对话框 ! C( I: c" X, s9 g/ D% l IEDIT_MAIN equ 1002 ;编辑框% m5 p5 I4 c% J/ F3 ]- ` ID_ABOUT equ 1000 ;关于按钮% R% z3 ?& D+ w" q ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - m6 x, N3 i& x6 }; 数据段 $ v. L$ p$ v& j( l1 v;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; y: f. j1 ~9 }7 G .data? $ U$ L V5 Y: G9 C* W: A9 M/ p( X: ^4 H* p: d$ d& @6 a4 A; u7 r1 v# @ hInstance dd ?$ }7 e* g3 b" \1 q, a hHook dd ?! b0 s& X, H6 @2 X( H) b hWndMain dd ?, n& v% M: \0 W IsStop dd ?# i; `2 T5 Q, A8 M 9 [% \2 Z/ `' j! M/ G0 q3 L .const 7 Z* E7 R$ N1 g4 K' d7 nszStart db '启动',0 7 K7 t& E: e% d, B/ k" HszStop db '停止',07 \# m+ g1 V3 x, w) G szCaption db 'EnableButton',0 * L/ o6 e- X; W9 h% pszInfo db '版权没有 03.8.20 游侠无极限制作',0; ^5 Y) A0 f- {( H szErr db '安装钩子失败,原因不明',0* z+ Q! P3 }4 \ szWnd db '%lxH',0 + s) W' N- U# O& v;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+ G! @1 K, Z5 e, \9 w4 C ; 代码段 - n3 F; ?0 v4 Z4 _, r, L0 p$ N;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ) E! t# V/ X- p- O( X .code% j, t' _2 t4 h5 ] ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; S G% }: i: J' `" ?- C" N;钩子回调函数% ~: _$ m' Z( {3 {$ r4 ` ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> % y( S3 l! t% k5 S& m' ]_HookProc proc _dwCode,_wParam,_lParam 2 d% f0 e- Y6 N$ \5 Y4 \- U local @szBuffer[100]:byte : e# H8 ~' Q% v j8 C invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递. j; ^8 }4 v9 I4 m# V pushad4 W J# V# R% v3 t# z: f# N) ~8 X) k .if _dwCode == HC_ACTION ;Windows要移除一条消息时2 o: U3 l' @/ W1 G' [' H mov ebx,_lParam " A, s8 X4 f! B( u @ assume ebx:ptr EVENTMSG : T2 x4 _1 Q" H- y* K4 r8 n .if [ebx].message == WM_LBUTTONDOWN7 p& s+ {, F/ Z( @: e p( b# ` mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄. T4 p& U- H# A2 }6 G( D) I invoke wsprintf,addr @szBuffer,addr szWnd,eax" l7 u: @. [# k6 H5 N' p invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄$ B7 m1 h3 H6 l D; F/ G invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效4 l/ K3 e4 y9 U .if eax == FALSE " ?$ Z' Z/ L0 ?) Y* D invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用+ h) t( h7 N$ i! _ .endif5 ]6 N: C. ^5 R& m, p- r ;.endif % @! {8 E f U2 o# U4 C2 e. P k .endif, A- }6 L1 A* K/ y w& z assume ebx:nothing3 ]- l! U% [' [, z4 u .endif - r: \- ^* n- `( b4 n- Y3 ?2 P$ |" \ popad / ~$ \% f1 \& h1 Q0 M' ^$ l6 f xor eax,eax 7 {: t' L* S& M, z! g5 J! M ret& @& d1 h! h( ?& E$ v _HookProc endp . j( L/ J! c/ T" ];>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$ B8 M8 v7 N5 V ?. O 4 K0 o& N# B/ l/ p, K2 O( o6 c_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam . ]- H$ d6 W7 r- l/ V( B p" b) e* a t/ g9 `' ] mov eax,wMsg 1 n0 ]' K$ _9 l/ @6 b) @ .if eax == WM_CLOSE $ W! l; l4 G! o% D/ k .if IsStop != TRUE& \1 W! V2 ~+ P invoke UnhookWindowsHookEx,hHook ;卸载钩子 " Q% A# \& d7 v7 b1 C6 {. \. o .endif " f* r( ?! @) j5 J: `+ ^4 [ invoke EndDialog,hWnd,NULL- x V$ m0 o Y: u/ Y" w .elseif eax == WM_INITDIALOG 0 u7 v y$ t/ {8 Z# y0 T invoke LoadIcon,hInstance,ICO_MAIN2 Y5 n; D' d+ u+ l7 U4 n; v( X invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax / A0 b& r- T5 E9 E! T invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层: ?+ t$ H) o& L6 o3 \6 P mov IsStop,TRUE 9 @ l9 q2 H' E( W push hWnd 1 h# P5 t! Z% [0 g pop hWndMain * I! N5 K* \4 Y( Z! n8 F .elseif eax == WM_COMMAND2 x& E$ ^( N3 @ mov eax,wParam ; Q7 A" M+ w8 M. A .if ax == IDOK% i6 d1 X8 P- m6 E/ I( i .if IsStop == TRUE & M7 ]" R" a7 R* b, U, m invoke SetDlgItemText,hWnd,IDOK,offset szStop" j' V% k' n" e2 a invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子 . n% \1 g8 Z: H% L .if eax 0 ?& k8 [ K% b, P4 u& x; H* B mov hHook,eax0 O1 q5 D$ K9 c. O$ h3 h1 v8 z; n3 ` .else ;挂钩失败 1 H/ r. H$ \+ W6 p8 r' U5 l invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING $ t7 d( y& X) U0 w# ^ .endif3 R- `# W, b, M# ^% N mov IsStop,FALSE* d% b' v( ? C- e- s( N7 b- y8 E .else2 q+ t8 A. @& L3 G7 \, z invoke SetDlgItemText,hWnd,IDOK,offset szStart 7 z3 N9 V- ~9 u) U. m0 n# s invoke UnhookWindowsHookEx,hHook ) l# C! }7 `7 R mov IsStop,TRUE / m5 ^; r+ ^6 K1 g& j+ V1 w/ } .endif 6 C [/ V+ J- @ H .elseif ax == IDCANCEL 3 R& D8 L. \5 l8 L6 u( y" w! _ invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL 1 D$ X4 ]2 b4 ]8 d8 G .elseif ax == ID_ABOUT* ^8 C; y: d E/ s! r! ]8 ` R invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框" M: @9 p! o6 ^, |% J4 _. ^ .endif / g. e) _ n' B$ e. A: i .else. Q" X% j% M8 d& [: D: N mov eax,FALSE 4 p/ b4 s8 ~! P0 K, Q ret3 `; ]- ]( \+ {' E- @6 K4 a .endif 6 Z( M' L4 k2 [, i mov eax,TRUE . O3 c7 y4 J5 D, d0 v+ Z1 X ret1 K" F2 W) X4 C- | . O% P+ K6 I3 G7 y8 D% U' r_ProcDlgMain endp 2 `. U- @" O% s" M5 g1 B7 w+ h1 W( m& c) Z N. ~' _ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ( U$ r( C# ?1 U* w* e1 Rstart: 2 L% S) L( ?# P0 q- q8 G invoke GetModuleHandle,NULL X) ]' t+ _% y* R mov hInstance,eax . f# P* t2 i8 H invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL , F. O5 }* W" h" A invoke ExitProcess,NULL5 }; O' b" v, j: C& u( b! ?1 r3 A ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>% P1 ^+ z* w' W end start- w3 M4 m2 l$ @: W: |& c5 o0 L# v $ _. {( j" s; r: Y" M, S3 V" L6 T% c% u 界面看下图片 0 j# ?5 ~. Y% ]2 c' C: q, y }9 w2 ~! l8 c L% A! u( r- i1 \ 2 @2 z) M2 d( j. p- E. J% l& x( v3 r% {6 K/ h 9 a. |0 a/ b. m* ~; D. M 1 A$ D# M6 J3 h. J# ~ / g7 i' v( v+ d+ U% s
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
* O- e9 a# F$ l6 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思
+ F& _  Y6 }2 W; n( X" ?不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致/ i9 f" {3 M/ ]! h$ ^$ s" |% t
汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,
4 Z' A7 h5 W/ X再来一个强一点的原创瞧瞧 ^_^
% x& {3 y2 K; q: R0 n3 a- u6 B
. v- j5 a/ I6 B9 A8 P1 ^) L
4 n# Z* l# u, j0 C
$ C+ `/ L7 z, j- I+ h. \
[此贴子已经被作者于2003-11-1 11:16:10编辑过]

! U+ t. n7 P2 a7 l

该用户从未签到

3
发表于 2003-11-19 00:14:00 | 只看该作者
bigfoot,留个QQ怎么样。

本版积分规则

关闭

下沙大学生网推荐上一条 /1 下一条

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