下沙论坛

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

用新浪微博连接

一步搞定

QQ登录

QQ登录

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>) u4 n6 e# H8 f* V2 \3 l ; EnableButton ALL For bbs.xsclub.com 2 K5 Y, s+ |( G- A9 C( U! _3 z k; by 游侠无极限 4 L) U- F0 I+ {6 u;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - Q3 |$ j z! W5 \; EndableButton.asm7 @& F2 E! V. }2 e9 E1 ?8 l ; 基于对话框资源 2 a' k' X2 [" \* f: e;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/ A- K2 R+ t, A9 L4 Z3 S0 Q .386 5 j, x% a* y9 b8 @! n* E4 I; K .model flat, stdcall6 L# R3 }' R( V- L option casemap :none / o3 t0 |8 ]6 ^7 [* N( Q;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> & F) U3 n/ g1 H1 I0 h" [7 \; Include 文件定义' ?6 M7 E$ n- w$ n ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7 h- F$ O' f0 c# Z' P+ Y include windows.inc3 z1 y, V9 H6 H include user32.inc % {. P: u( B) X! a, W! T* X3 _includelib user32.lib: t4 `' T$ e1 R/ }" Q include shell32.inc 9 Z7 @5 g% T+ o" }: F9 \0 p2 Vincludelib shell32.lib 1 s) P8 B% o( _6 D) ~2 Minclude kernel32.inc; s8 L/ G) f! e5 Z- g; j( L) f includelib kernel32.lib5 x5 X8 @) }( Q: \4 T7 l ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " P5 @2 A' [( B( ~, T; Equ 等值定义 ! ]: e- k8 H9 o" K+ x;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 t, }4 q6 q- f9 ^8 P+ }ICO_MAIN equ 104 ;图标 & K3 a/ u$ {2 P5 I. ^9 GDLG_MAIN equ 101 ;对话框 2 {! G! W8 A8 W) C* LEDIT_MAIN equ 1002 ;编辑框' e$ {' y @; L, y ID_ABOUT equ 1000 ;关于按钮# }+ I+ l: Z3 } c+ G9 \ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ' q4 ?! d) H8 g" J5 X! Y; 数据段 ' ?- @0 ?6 z+ ^/ w$ |! _# B;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * f. D2 m+ [5 c) w/ s% d1 G3 D6 v( L .data?' X- X [) o1 A/ ~5 s 8 Z, ^- [* Z+ A" I2 J+ vhInstance dd ?4 L Z! g7 Y" y2 y+ C" Z hHook dd ? $ o1 q$ |) |4 u. Y OhWndMain dd ?! q1 d, W, Q' Q; z6 X( j1 L IsStop dd ?$ E: e+ B! @- ? 8 d C6 W( r* U! x/ ~! U" o& u .const 2 C- F1 D1 h5 |szStart db '启动',03 ~: B2 k+ D8 u/ E/ T; x: \& c2 f1 W szStop db '停止',05 @# m- C% l6 C1 I szCaption db 'EnableButton',06 {2 m! T- ~% _4 j6 d szInfo db '版权没有 03.8.20 游侠无极限制作',0 3 E* E* X8 B% YszErr db '安装钩子失败,原因不明',0 5 F* Y# }: s3 B5 HszWnd db '%lxH',0 5 ^% ^' {* W9 @0 c;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$ [9 x0 T! }6 t) @ ; 代码段- C( a+ t! t1 Z3 y2 ? ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$ ?3 r7 T* Y$ l8 A .code * s$ ?0 X; k' w; P6 y$ d1 Q+ j+ b/ x;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> & S0 w; K5 x- [- l' H* q* y;钩子回调函数5 z& e, v6 z$ w4 S ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 6 \. L( y" Z N* B2 I2 @5 c_HookProc proc _dwCode,_wParam,_lParam1 S5 n; \! |' W1 R# c. N local @szBuffer[100]:byte ) A5 Y! C" B8 d" o invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递6 J0 }$ P5 U8 _. i- u pushad 6 C+ I5 W/ W' e" i+ `" {( ` .if _dwCode == HC_ACTION ;Windows要移除一条消息时( U7 ]! Q& K# E& P! @ mov ebx,_lParam; M5 W1 }! ]* O8 c! @# S3 ~, T: b assume ebx:ptr EVENTMSG ( s7 `# U# z' F3 D+ [3 l .if [ebx].message == WM_LBUTTONDOWN* k: o( {' S+ P1 f# {: N$ } mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄' Z, V) W: G8 @# f invoke wsprintf,addr @szBuffer,addr szWnd,eax. y2 [5 p. `; J) O" ~ invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄 9 |# U- n2 G3 {- x invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效4 W' {2 z2 g& L9 b .if eax == FALSE , k# l. I3 M7 p, w invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用 7 t) `7 c2 v) ] B$ @1 S .endif 2 T( V1 U6 j0 a, B. r6 _# E" z7 B ;.endif( `% h( \. p3 v( e) s% h .endif7 _4 J$ y) z! O3 ?: b assume ebx:nothing4 G, U0 v7 ~, K .endif, q* L, n/ Z. I, R a: f ! B5 J9 \9 q) R3 J7 O popad4 ~1 B; c' t R7 D z6 J xor eax,eax0 h& v0 Z6 P& @; I3 z5 x" k ret. k3 N) Y2 p/ b5 N& _" ~ _HookProc endp # d; t! F/ J5 r9 f# b) v% A1 x2 o" Z;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5 |# \3 q" T! e8 P! } ; v" p! G% y& Q4 j; y6 S_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam & L5 d) u- u+ g6 i6 _ x: Z6 Q p6 O" I0 K( a mov eax,wMsg j; D( H/ n+ n5 l+ {; B .if eax == WM_CLOSE 4 |. Y: Y: B- ` I .if IsStop != TRUE& Z# K2 N0 y/ t+ ?/ ]+ ~ invoke UnhookWindowsHookEx,hHook ;卸载钩子- k1 e$ h+ M, v$ o( e2 s- s .endif % W& ?. G w" C5 N invoke EndDialog,hWnd,NULL. n6 y& X6 V" k& J* c .elseif eax == WM_INITDIALOG6 C# q% a& Q- z invoke LoadIcon,hInstance,ICO_MAIN 6 [+ M0 y# r1 E1 C invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax! ^) _+ X& m) b& @% h4 t2 s% t3 [# [ invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层 1 |- V+ _/ Y( ^7 c7 q+ T mov IsStop,TRUE . m, T* W2 f* e( x- Z# Y/ s push hWnd& R+ ?' s8 w! t) D pop hWndMain % [% y: Q8 m8 f9 p .elseif eax == WM_COMMAND 7 G$ |% U; w; j. u# O( v mov eax,wParam ; I# l0 j" @8 l+ L/ [ .if ax == IDOK 2 V+ |$ _: Q$ i) h8 { .if IsStop == TRUE ( ]; X: p; b# z7 v2 _5 A invoke SetDlgItemText,hWnd,IDOK,offset szStop9 l/ @+ ]4 }& M, m0 c invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子* u4 B7 x, E" J .if eax* Z/ I, I5 }% |' t! J* n$ ?, _7 Z mov hHook,eax . G$ l2 `& u" y! } .else ;挂钩失败 4 Y5 y/ V5 D- K. G invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING+ e# F8 f5 t* r5 f) a; U9 i' a .endif! G; {. Q# A! g: r% r3 t5 H2 _& w mov IsStop,FALSE0 f* j( P% r8 ~" Y .else1 S b2 T6 o1 P! F' C invoke SetDlgItemText,hWnd,IDOK,offset szStart 0 j2 V7 M6 X( K" S* {; z9 [ invoke UnhookWindowsHookEx,hHook 8 g2 o6 w+ e8 n' z! e mov IsStop,TRUE& G8 x2 f4 f) [% S .endif0 p9 t, {1 m7 N .elseif ax == IDCANCEL h3 S/ j4 J4 C invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL5 f* M) K& [6 g .elseif ax == ID_ABOUT 4 p4 I& h' s) G7 h. v8 I9 a! S7 C invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框- v2 p8 I5 M, q# _ V$ N .endif; u; ^- M4 u* O6 f/ G0 Q .else& Q/ q: F& \3 Q! A8 p mov eax,FALSE+ n) c Y6 X( T- o# O2 N: d ret - s) N9 p8 P4 e! f .endif' I) d! ^! c7 ]3 {% J4 i; e mov eax,TRUE% A8 l: P9 v* P ret# h7 B6 R& p3 G) s ( b8 g1 x! r( U1 k* ]1 N _ProcDlgMain endp " c% l2 c! J U$ t+ L6 B0 J$ d. n0 L% J8 S6 k) F, e: S" } ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>) `8 Y. X* S* ]3 O) i( h start: 2 Z, g1 Z2 g' r2 ^4 A4 x invoke GetModuleHandle,NULL " t! y& I% w6 q# z+ H% L mov hInstance,eax" i/ ^7 b8 d/ q$ M, J: n# ?. B invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL. }, q! I+ ?6 |1 n8 b invoke ExitProcess,NULL# I* }( T7 V2 @ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' z0 C. |4 G4 j: K( ~/ m3 p# t end start 2 b1 X' P6 i/ Y+ I" Q5 \3 x2 Y2 i& J9 |1 z6 x6 B + T+ [; H( R& e, ?' P 界面看下图片 3 T: O6 \. p2 U: K Y" ?/ W! M; h* o' }+ @ 8 n- F$ M/ Q* m* f. _$ c0 J 1 n3 T3 N- ?1 U6 J3 ?) Q' M5 U7 ~' _% T! o: e, B9 e; o C3 q" D9 B & `% y) u2 W. C9 z3 [0 a8 L( W; f- ^. X9 v$ { : S# _$ }7 ^5 Y1 w+ E+ ~% J2 {5 n
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
4 [8 {6 F! Y% k6 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩 转发到微博
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思* Q5 m2 v: @3 N$ ]/ ]. f
不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致: D- W) y! E& d' `' @
汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,
5 m, l3 `9 B1 G) X, @2 x再来一个强一点的原创瞧瞧 ^_^; x3 A, O+ P4 z$ {- M, C, H

* n: t4 k9 {+ U! d2 k% I$ A* v7 C: `* h8 L
1 P& k' x, t2 |) y- N5 X* E' ?0 v: _$ ~
[此贴子已经被作者于2003-11-1 11:16:10编辑过]

0 G, r, S# G* l2 u: k% g  E

该用户从未签到

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

本版积分规则

关闭

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

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