下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>! B9 b @& i% F. D ; EnableButton ALL For bbs.xsclub.com! a2 C" G( Y# {% b' }+ N ; by 游侠无极限 ; `0 i3 T" b- L5 x) c6 {+ J- S8 m2 n;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 6 e) W( E& B, F% b; EndableButton.asm- a6 l8 Q5 E, R8 B ; 基于对话框资源 # o0 G: A* J/ Q$ I7 F. b;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ' u0 S/ [0 m2 Y5 R7 A5 X .386 # K3 i' R. i6 U# d- q7 @/ E8 `$ b5 h .model flat, stdcall& ?4 B8 r* X3 N3 x7 D) b+ I7 y' W option casemap :none: Y" d2 Z" [0 W4 n) o+ R! ^ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>! T. E# r) m2 X3 v ; Include 文件定义- q- U# N+ f7 i. N6 c' H9 l ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* a; Y! |& n" q: I include windows.inc1 R. a+ v7 e2 R, P5 x9 a include user32.inc 6 c& W* p4 U& wincludelib user32.lib9 y$ ]2 V$ t5 t" R include shell32.inc0 T: F& p7 i; N9 i# A includelib shell32.lib! h+ `& H: p" }3 F7 T- k% z9 u include kernel32.inc9 M0 q4 ~5 P, J2 I: g ]6 H includelib kernel32.lib 0 Z. I O h" F7 }6 L;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 F5 p( X& x Y3 ]: k+ z }6 d ; Equ 等值定义 0 _# C+ V J6 n/ t: ~1 f$ f9 H;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8 a& c' U# P" k ICO_MAIN equ 104 ;图标 ' e! V" r+ G$ o/ U9 FDLG_MAIN equ 101 ;对话框 / Y1 q/ V j& H( R! U& U5 iEDIT_MAIN equ 1002 ;编辑框: C1 E! m, [- `- {/ k* n ID_ABOUT equ 1000 ;关于按钮& M/ ^* D* \; A# C9 _7 J" @ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 8 A$ ` c1 q' K. }; 数据段) H7 E$ B: W% x. A ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: e; h- ]2 r5 l8 l% H, H .data?9 H: u. S. \- d G0 T1 i' E* Y% D! L0 f8 N& P7 rhInstance dd ? ' A5 f- B1 C; H- o) U1 jhHook dd ?, A. t x6 Q1 G5 O) Q6 A! { hWndMain dd ?" A: q5 T- o6 o6 x IsStop dd ? " q9 `7 {: V5 E8 l # I8 q" g2 L" ^8 j .const ; N. f' x4 U# j% S4 f5 VszStart db '启动',0 m H3 `: C( ~' E H szStop db '停止',0 S5 j3 X" m6 r0 b0 S- {) s szCaption db 'EnableButton',0 % ~; N0 R0 n; a; F, [szInfo db '版权没有 03.8.20 游侠无极限制作',0 / l% g' T3 R% U& g" N3 NszErr db '安装钩子失败,原因不明',0, w# R% B/ e. a6 u& d( h szWnd db '%lxH',0* I( t" {6 a5 `# u" ? ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> , h" ^* ~- a; H) Q; 代码段 + h, ?: M8 n0 V, b) p1 j;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! w/ O f. v1 z0 Y5 `7 i+ i7 } .code * w6 a& u, E8 F;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! y7 P7 x6 Z* u; s;钩子回调函数: Z3 M+ L' {' O% N8 k, b( ~% a ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 Y* \) a) H9 Y$ }* b_HookProc proc _dwCode,_wParam,_lParam ?" U- \! V, t; X9 Z local @szBuffer[100]:byte 8 k2 H/ n/ y$ X. ~* _ invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递 6 J8 w4 C: m- G& k pushad0 l+ B6 ]# w& g+ Q7 W1 } .if _dwCode == HC_ACTION ;Windows要移除一条消息时 : y6 v, a/ B# M1 p0 u% I3 V$ D mov ebx,_lParam. s! m( [( D! E# F b0 ] assume ebx:ptr EVENTMSG7 `( u$ ^; `* q+ {! q& F, ~ .if [ebx].message == WM_LBUTTONDOWN ^7 O+ V) e' |! _2 s6 N mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄( \( F; z/ C7 P invoke wsprintf,addr @szBuffer,addr szWnd,eax1 @! j' l) y! x D+ w' d' u) S! @8 | invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄 ( f! o0 i7 O4 O! S invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效 + }7 G& L0 c: f2 B .if eax == FALSE 1 ^" k- W8 h/ c/ x5 D1 Q invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用' J. [( F! p* z4 |+ w .endif0 T L+ u# Q' l# }6 S8 u6 P) { ;.endif# U: {/ F- w( n9 a! _" p .endif * Y$ D8 q# l8 i( O' G, k assume ebx:nothing ' `0 p! A9 N* v1 l9 Y" l( g9 ~( j! V, | .endif. s( j' P' z; z$ Z0 u! j" A3 H ; Z( m: l4 g; B5 Z9 H. u9 s popad# `# w7 p8 d. M% @/ P" v1 S xor eax,eax 0 P& {3 Y! K* X, |9 p% s; | ret; n/ R0 o+ W7 k1 x _HookProc endp . C5 N6 R/ a* L1 r;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* M& x6 ~5 h, R O. r q( q. ` 8 R1 x% k+ P8 P" z4 p6 N$ K X_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam 4 G/ h) k" r) Q- Y `/ q) Y9 W : ]* }$ K H- \. ~' ?' c: K mov eax,wMsg; \0 o9 Z+ t. M2 c .if eax == WM_CLOSE ( H, w- d0 C) V6 M# o .if IsStop != TRUE' H6 W5 G8 |5 J0 O k7 C invoke UnhookWindowsHookEx,hHook ;卸载钩子 ( A* z( A. m" y9 e6 n# W .endif + K' V. L5 D3 N# R# i# L( Y invoke EndDialog,hWnd,NULL % v) {5 H0 a+ {1 k .elseif eax == WM_INITDIALOG ; V l8 o( ]( C1 a# m9 a invoke LoadIcon,hInstance,ICO_MAIN 8 e2 n' R. J. P( H* U3 M& O invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax 0 i+ ]6 D4 D9 c" ?, W, a4 `6 w0 H9 u invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层0 \0 d; ?! Q6 i: ] mov IsStop,TRUE. ^$ Q. }$ Q2 r& A8 T push hWnd" B! o; V( Z: B pop hWndMain : F7 y) c. q: U. K9 u" [ .elseif eax == WM_COMMAND # y* z# B8 T) V* E mov eax,wParam5 l# G; j$ e5 u9 d/ T5 C .if ax == IDOK6 q6 x1 Z$ Q8 J! o& X, f4 A .if IsStop == TRUE & ?) I5 Z7 n: h- }& e$ ?5 ` invoke SetDlgItemText,hWnd,IDOK,offset szStop 4 d8 k6 l7 h: R# A x invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子: A! U( s: J8 F .if eax- i3 o2 L: { k( y% N4 y mov hHook,eax 0 l4 u, n. G8 F0 u .else ;挂钩失败- Z) I A7 M8 X invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING' T( D; U/ Y) o; ]* m/ }( l+ l; N .endif [9 l7 Z0 ?$ {, Z4 x8 \ mov IsStop,FALSE) W' M6 y+ A+ z8 \ .else, H$ ^5 w& r4 R ^4 L, K* Z$ y" L invoke SetDlgItemText,hWnd,IDOK,offset szStart . G! _7 H! [- E4 | L0 c. G3 ` invoke UnhookWindowsHookEx,hHook6 B. B0 d# x" ^ mov IsStop,TRUE; J. Q( J* I( Z$ H% @2 t* q .endif) {% B X4 g6 f; e .elseif ax == IDCANCEL + E! I+ y/ z |( x; | invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL6 e3 P) @2 F/ N- T7 V3 Q( f& O0 s .elseif ax == ID_ABOUT " W _% s& }. E A3 J invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框' v/ ]# y& L' q .endif/ U. Y& v7 l. ~: f .else0 M" V, s" n( D! p% _. i3 u mov eax,FALSE . G6 {6 ~. U( e! z6 u3 l; U* B ret/ F! ]7 M- Y& u3 \2 `/ c .endif3 W) d5 z: A4 t7 f$ I mov eax,TRUE " i% V$ N' V" ~- B, l ret 2 Y9 W- ]6 u6 E1 X9 [5 E* c8 P* E2 C: ?! V$ d _ProcDlgMain endp5 f5 Y- C# O8 }6 K+ X 9 E! q$ Z7 Z; u( R* l0 G f! y# P ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 4 W9 n/ X4 D- t4 p5 ?$ Ystart:4 D& A/ D+ L# k; b0 m invoke GetModuleHandle,NULL - |2 P N/ d" ?1 ?$ E mov hInstance,eax + V3 Q+ k/ c5 b) ?' c1 \! _$ d invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL+ w$ A9 }6 }2 [2 o2 d invoke ExitProcess,NULL9 Z3 c# L5 ?2 R! ], d ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> . R4 @1 ^3 h& D; L( ` end start & }& I( r4 O7 R: Y, x0 O: A! u0 F9 d5 H' X3 V1 W; d 8 o$ D. G* K" K7 L/ o# h0 X& \9 x# R 界面看下图片! h: a; M9 h2 C* C# V2 { ; }' B- `9 }! W0 g. Q, H , w2 B: n) B3 s' E7 d& U0 Q1 }4 \5 i0 S # F" u1 d" ~' C; y- z$ @6 |* } p; @ A $ M0 u- a9 L! d$ B! V * R% d- F. j- o3 g7 P w# v6 |0 i" h( v( s2 U; m" c
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
- A3 z( V+ H0 }9 H7 O+ c% Q( I$ d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思6 z* K+ e5 m, J9 [1 A; ?  S
不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致
: `- Q6 O8 l4 ^  P3 g, M汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,
- p, u; X/ x5 y3 B再来一个强一点的原创瞧瞧 ^_^
$ B& C# e6 t- ~+ d, l0 G! J1 F' p& Q' t

$ p& \4 c4 ]# ~0 y1 k
4 ^" D& z; v! a
[此贴子已经被作者于2003-11-1 11:16:10编辑过]

, \6 B3 K- [( P& N, o2 v# E* q4 D

该用户从未签到

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

本版积分规则

关闭

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

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