下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 4 \) U' U6 V" l1 d% O2 [; EnableButton ALL For bbs.xsclub.com 4 a, Z, a! z6 I6 `% ?# T; Z; by 游侠无极限( V0 d9 V! C \5 n ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> E( p( m0 C1 D( H; D/ M ; EndableButton.asm: m# D+ p2 z. `! ^$ \, j8 R ; 基于对话框资源 3 d6 m# Z, C) ^;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6 n9 V& Q4 k' ]$ l+ h .386 " _: j6 f. @6 g7 O( s5 j, w, a8 ` .model flat, stdcall' a1 v8 J( v* \5 M* d option casemap :none ) Q8 |4 L9 B, [! M. K;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0 t3 [# E$ C; n( ?# j9 |: M ; Include 文件定义 % y6 p7 @& \$ Q;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> & J6 c' s# G; u. R* ?include windows.inc- a$ |- }2 Q* G) @4 J3 f include user32.inc6 I ]& w# i. R; y includelib user32.lib: P9 a8 }+ q$ f/ V: G3 ]7 z6 R include shell32.inc( a/ k" {* J( L; L( Q3 \) @ includelib shell32.lib$ p% B; c. h/ A include kernel32.inc5 ^7 Q+ O. T' X) H u includelib kernel32.lib% a7 B) }, K( G7 J) t$ ]6 R. p ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> & X: l d% L; W& T7 e; Equ 等值定义% N! i# V. ~/ R9 } ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7 u6 D& H4 ]) @% X& ?9 w9 U$ |9 j ICO_MAIN equ 104 ;图标4 X+ N0 @4 ]6 Y' E DLG_MAIN equ 101 ;对话框7 Q1 v2 s2 X: m; s" v! H9 {' l EDIT_MAIN equ 1002 ;编辑框/ ?# d$ w- Z! O ID_ABOUT equ 1000 ;关于按钮 - H! @# j( E1 O;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> : g8 K3 S3 {0 m+ j% c; 数据段8 ?. x* e" N/ `6 U8 H ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> % Q8 Q2 P+ @3 _+ y7 A( c .data?) o% Z" B! v" b) Z2 G 4 X. n& |% D2 p$ H y e) e hInstance dd ?. {% @6 J% m" m, d hHook dd ?% J- K6 w: _, e& B+ r* H, k: d: V hWndMain dd ? 0 r% v- C0 t. }: K/ b/ c$ JIsStop dd ?& e: p; z! P+ f- n6 E3 F O' p3 D2 g+ b# x) h1 V .const 8 H- j& {( W% l; c. s! r3 l% r! B5 AszStart db '启动',0, P' g, L; z' y9 F. {4 y szStop db '停止',0 % L! n( _( _: \6 HszCaption db 'EnableButton',0 - [5 A* \$ n! c. j. Y3 \szInfo db '版权没有 03.8.20 游侠无极限制作',0 / l8 O2 F( G% L) P0 g, o$ SszErr db '安装钩子失败,原因不明',0 4 T; {/ ? P! y/ M0 ?# l+ o2 KszWnd db '%lxH',04 Q: | N0 N$ _3 w* m ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>># G' H( p" ^) R0 _# i. l; D9 r$ W6 O! _ ; 代码段 7 c& ]2 O8 N7 `( q: t4 c;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 0 F0 G" M3 t8 C5 i; _8 [% @4 o' S .code 7 ?+ Z! B# `. T. W! i;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5 o" W) G7 m) K; K$ M! M ;钩子回调函数$ R2 G/ n b* v" R0 m ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> e5 J/ @" V/ N, r/ v2 I_HookProc proc _dwCode,_wParam,_lParam" Z( F& v- i! U) Z; k4 R local @szBuffer[100]:byte& i+ P6 u. f- A" _* T invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递 0 p5 [ F7 h) y3 E pushad% p8 L/ r5 S! C: V$ B7 E .if _dwCode == HC_ACTION ;Windows要移除一条消息时" }, E3 N8 w- \/ O' i3 v, c# J mov ebx,_lParam+ ]# i8 R! g/ j# d$ S& p( C assume ebx:ptr EVENTMSG ( |0 m s# [" Q# ]: {% { .if [ebx].message == WM_LBUTTONDOWN 2 o0 P% d3 Z2 C) B% W mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄 % r" Y9 q" t, x. V& s9 W4 x: V invoke wsprintf,addr @szBuffer,addr szWnd,eax! Y; j# r( N; Y, M/ K! q invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄) d" \2 A9 w& s* Y invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效6 E" {( @( _: ^# \) f2 @3 Z .if eax == FALSE 1 N% }+ z: H& w- j* e. U- [ invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用4 ^# y( O# m. i$ V2 D0 d5 w3 U" f .endif ' r( J5 Y" E" b" u6 W& X ;.endif6 O6 D _6 k4 ]$ y .endif ' _' ~3 U1 I) H assume ebx:nothing: b5 K. e3 q( c: m# p .endif & h1 P @8 p( _8 s# i # n9 h9 `' Y W+ X# D popad: v k: E# i" h$ a xor eax,eax3 c& E% e `( x6 j- w$ R ret C4 t4 K9 g9 Z. f/ G_HookProc endp( R- a2 N( K7 T) K8 d6 j ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>! K+ s" J- z' q* y# P& o i/ X5 c % @$ i2 x( \" o_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam : U: b7 x" f/ M: v ) }8 j9 W' Q. P( W; @ mov eax,wMsg2 a9 W8 k( ~) g3 i4 b .if eax == WM_CLOSE 7 y, f9 h$ c, L7 ]3 m& B- K .if IsStop != TRUE $ d8 c% [+ c5 Q+ ]0 M! a, T invoke UnhookWindowsHookEx,hHook ;卸载钩子2 w( j' h) t a* b! t# G& n .endif ) y) G3 [6 g f, T/ q invoke EndDialog,hWnd,NULL4 B2 y6 R5 v, {( Q$ f .elseif eax == WM_INITDIALOG 2 M( e9 V& }9 i3 m invoke LoadIcon,hInstance,ICO_MAIN 6 v0 T" G! M# c" u3 T9 U$ f invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax : U2 m7 x3 Z6 ~: x invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层8 Y) S. K- s0 X, @6 j/ E* V( z* R mov IsStop,TRUE 8 b9 o7 M3 A( V% c push hWnd0 @/ k T' d1 `. c) L$ } pop hWndMain , V; k$ `* g* T& o' D, q/ { .elseif eax == WM_COMMAND. S/ F4 p# f6 A0 B mov eax,wParam) l. Z/ C F( _5 ?2 Q+ t$ H# ] d .if ax == IDOK$ d7 Y8 d1 t, X7 H% A .if IsStop == TRUE! j! f. c2 s% P* O invoke SetDlgItemText,hWnd,IDOK,offset szStop" L; I8 L! F+ y- I2 n) j invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子9 r; z, z; `% j& Q: q2 }# t .if eax; l' d$ X' G1 W2 y2 T! r4 j) d2 |, ` mov hHook,eax " ^. P2 j0 [% T% Z$ M- t .else ;挂钩失败 - ~9 j6 ~% E) W% S2 Y. |& }( Y invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING. ]8 N$ n1 [ G" l8 e .endif ; O3 h) y$ S+ Y& y; `$ b2 i mov IsStop,FALSE7 u& |: O9 R9 c& y$ C .else / \7 m! p! M8 j- T) d' D0 U invoke SetDlgItemText,hWnd,IDOK,offset szStart7 c2 G2 `# y: c6 Q! i3 T invoke UnhookWindowsHookEx,hHook * U" J- U' D: N0 C8 ? mov IsStop,TRUE , O( _. E2 p* |3 g/ }% ?9 C J0 X .endif / I+ R" o6 ` R l .elseif ax == IDCANCEL / I3 i r* u0 h# q& G' O invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL - @, U( q* D# k# k- H' Z .elseif ax == ID_ABOUT + [6 P# }% u/ ^1 }# {4 S, J6 d invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框4 e2 U. }$ e" J2 I .endif * ^. H* X* x3 Q2 c# L6 t5 @6 v .else . o$ I/ T& a# F/ f mov eax,FALSE ' w. P3 @8 T9 G ret $ ?' I, p0 a2 E5 R7 t8 } .endif7 H3 t, l4 W/ W7 Q7 K/ F: p mov eax,TRUE3 i+ ^3 ]( r$ f4 l' } ret; E5 d" o+ {7 m3 n5 I4 H3 F ' A( N5 o- w- U' R# v" t4 d5 p_ProcDlgMain endp ; y: Q9 V3 b% c5 t/ g8 i* I/ R; \/ R/ i) _) X% l5 P ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> , s' c$ a. f+ X) N7 i2 ~start:) V. n# r0 h5 P: V; H* t* B5 u+ E invoke GetModuleHandle,NULL 1 _% D! g+ h8 v( P9 [' ~( l; s mov hInstance,eax: I8 f. F& l& F invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL ' n$ i8 k& `1 ?% g invoke ExitProcess,NULL" K8 f4 V' G9 H5 O- R ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9 f* m# v, C* g- m end start+ L( P( l/ O. g: w$ ~# M ( h( a0 y) r8 `2 m& C J/ H- s6 T: M" o0 i" L1 W7 e P, | O 界面看下图片 1 [' I5 I) ]8 W$ u) n% {) m9 ]! d: B8 R4 I" R4 r) c6 E7 H 0 K' F l- `0 u7 R5 Z# I 4 e/ j4 o" b; h3 O* j3 i, v- ? p, e 7 _& V7 e2 U) n8 D; X; i7 ^3 y' I) E" c5 [. X" L# a : _+ }6 J% l1 z Q- V
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
" ~$ P* S2 B7 W! G5 h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思0 x  @) h+ ^7 e/ ^
不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致
: e1 S6 S5 a0 C: S8 t5 ^汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,3 Y) b3 W8 o/ |6 v( h) S
再来一个强一点的原创瞧瞧 ^_^. j0 l9 c3 m8 S. L% a/ V
4 W  I! K4 X% Q- M1 f9 m' B0 I( V

! Z; J- q5 h3 b+ ^% p% T0 B# u
) `% Y, C6 Y' H. e- t8 H
[此贴子已经被作者于2003-11-1 11:16:10编辑过]

4 p6 ]: @0 ^0 t  Y* g5 x& e

该用户从未签到

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

本版积分规则

关闭

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

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