下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * P' x& ]; K# I! m+ {; D; EnableButton ALL For bbs.xsclub.com ]/ J# B% u4 {6 Z, h; by 游侠无极限 4 B$ z# ~! M5 l2 I( M;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; E9 \0 l& ~- r ; EndableButton.asm 0 b9 r% |) `/ T' f/ H, x$ z; 基于对话框资源5 b8 O# ~2 Z+ \/ z$ b9 { ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>4 ^' s( B* `7 f$ |0 L .386 : |, G3 }0 D; E$ H, b: i .model flat, stdcall % u( Z$ O5 y( c; E% f ` option casemap :none + r5 x, Z& O2 P;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - A+ I' w- M9 F3 i/ O, Y" `- B6 ^/ F; Include 文件定义' z; H! A; o+ S. f& w, R! f ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>( I6 ~7 d$ v" _+ `* g include windows.inc & y* q" K$ | `4 f2 @+ Rinclude user32.inc 9 m4 B. ]) [! h# w0 g9 Z2 f* `* rincludelib user32.lib ( I4 ~3 v. l4 @& m/ p: G+ uinclude shell32.inc- m/ W; ~% X6 Q& @9 H1 _& P4 B includelib shell32.lib. g" Q1 J1 M* h. g) ]! g include kernel32.inc8 p0 u c1 y- J* J7 G includelib kernel32.lib4 Y. {# O: T- b5 e( z3 _% _ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * V5 C9 U3 c! l* c: y$ _- p/ r3 U; Equ 等值定义 ' `$ N5 J* o2 o8 l& v;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>! R7 A- z, t& X2 D6 I2 e( a, x, I, ^ ICO_MAIN equ 104 ;图标! `6 ^* T6 T& L1 U DLG_MAIN equ 101 ;对话框 4 K, ~' r& T X6 T, t( ~EDIT_MAIN equ 1002 ;编辑框 0 K: q+ ?1 x5 O$ Z, wID_ABOUT equ 1000 ;关于按钮2 e: Q) c. _$ `6 r* x5 u ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 7 y. w F7 m$ x; 数据段- D R1 u2 B$ m9 ?: N. C! T. G# k ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " ^ S2 {5 l# S; k7 @ .data? + T7 d5 g4 E) G * i( z! {2 s' VhInstance dd ?8 t6 G9 ]6 x( z5 I' l I hHook dd ?, F2 u) }. m& e3 u hWndMain dd ? 8 G5 f# B! B8 u7 iIsStop dd ? ) B. H/ p/ K) R8 ?, g , S! o2 _3 T# f! z% n" S .const4 w! c! |( {5 Q3 ~5 |; L6 o R szStart db '启动',09 H. V3 R( I9 [' I+ }( `4 ]& Q szStop db '停止',0 7 J: k- p p3 R( F: pszCaption db 'EnableButton',0 1 g3 j/ E2 J t2 Y8 M" yszInfo db '版权没有 03.8.20 游侠无极限制作',0. s+ Q& v/ q3 K* Z. d3 |" E szErr db '安装钩子失败,原因不明',0" Y& \2 Q" ]* d szWnd db '%lxH',0# C9 ^# {% A! ^ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3 X+ P5 U% L3 q: _1 @; 代码段. `- S2 e; b* N6 r" G ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>( _2 F0 b; \9 P7 k5 W .code : N% _3 A9 ?% a9 j4 B/ x7 X7 L;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ' m4 P+ B1 R( a3 y;钩子回调函数 4 c3 ?$ y. f4 h8 w7 T; |# A" `;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' B: u6 f5 I: S+ ?: p& t _HookProc proc _dwCode,_wParam,_lParam: g/ Z, a% G t! F! Q local @szBuffer[100]:byte, F6 ]5 o& B; ^ {& s) Q invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递 5 v6 A8 J: d; l' a( G pushad6 P3 v6 A3 k) h8 m* v. N9 w2 S .if _dwCode == HC_ACTION ;Windows要移除一条消息时 ( C6 Y3 {$ L, T P$ a mov ebx,_lParam % n% {" ?# N E assume ebx:ptr EVENTMSG % p+ V7 c" t- ]; B1 p3 U' q .if [ebx].message == WM_LBUTTONDOWN 6 q% V- u2 C- b2 ]5 {* ?5 ` mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄 : A8 P4 s& O% S& h invoke wsprintf,addr @szBuffer,addr szWnd,eax 5 T% {/ Q& t) n8 `" D invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄1 J7 ^$ L- K$ T( s& m, @/ A0 W invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效' `2 U4 N3 t S5 I .if eax == FALSE& _: S1 O+ H) a, Y4 f1 i+ Y6 J invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用" ~' f- H) N( N .endif0 `+ |8 L4 [/ Q ;.endif 3 G" U" U5 d* u5 b* w' ~0 ` .endif$ F u' ^8 G O' @% t assume ebx:nothing ' E* ^& y" v) w; I# C# Y6 H0 C8 }! K# z .endif ( p* j5 @0 O- ] M8 ] * k. `6 c/ c8 B( t+ B popad, h2 [8 d/ k1 }8 p& G' w( ^1 a xor eax,eax * _, G) G" Y1 |6 L ret3 p/ C! Q' O2 m. g& n m3 p9 g _HookProc endp ( N7 d/ |4 l @; ~( Z;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9 L! \- K9 Q; F6 w* j6 K " x; c! G5 U7 N1 Z _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam - z' Y' C% x4 v $ p" B# a: o0 D& Q2 v# z, X* ?, I mov eax,wMsg / m( }" x# I5 O) ?: R .if eax == WM_CLOSE % d3 n* w' S8 |* i* E/ N0 r" i! I .if IsStop != TRUE, \; _& s! |3 A) ~( Q8 ]- k5 E invoke UnhookWindowsHookEx,hHook ;卸载钩子( y% e# K9 k+ r3 O J j0 j .endif3 w2 w8 ^. s+ Z+ x- H invoke EndDialog,hWnd,NULL + A& j: Z P* V( G* M( k) j .elseif eax == WM_INITDIALOG, R' _! F/ P0 E& o8 R$ C invoke LoadIcon,hInstance,ICO_MAIN7 g% q+ T& E4 l3 B invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax: S3 i$ ]) G* u! t" t3 V$ V8 C invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层+ I1 U/ m5 m/ _" h7 O5 a mov IsStop,TRUE + A( |9 b4 D' q+ t u- Z) V push hWnd 6 i7 T6 C1 G: ]' k" G" ~ pop hWndMain& g- j& a* k3 u6 Y. i2 T; g .elseif eax == WM_COMMAND$ X" o. n7 ?3 p9 L1 B7 H' _ mov eax,wParam , s8 E# Y& c4 e! U2 b .if ax == IDOK2 G3 _/ Z3 J) g& w! D# `, x5 `& z .if IsStop == TRUE / L' H- g- X" R/ q& `) o invoke SetDlgItemText,hWnd,IDOK,offset szStop, R3 X/ K1 o2 o. L% V9 [: m invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子2 m2 t/ V p1 f% Q1 h" T .if eax * z5 h# b2 \: ~ P! O! z0 o: c2 p; \ mov hHook,eax + g' |9 s2 `# n# u) M+ ^' \ .else ;挂钩失败 : g; u- C, W, N invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING $ m9 b, n) R6 E+ V) }; L .endif 9 ?4 D1 x) J7 Z5 L" _' {7 _4 C, r mov IsStop,FALSE ' S2 l* Q$ k% `8 ?7 j. h .else6 {, u; K1 ^; f; |3 m invoke SetDlgItemText,hWnd,IDOK,offset szStart) G, z0 k4 U* O: \9 b invoke UnhookWindowsHookEx,hHook 1 Q1 H5 s) z: q% I8 \ mov IsStop,TRUE - W- t. a# P+ I5 b .endif 5 ~$ n' J% D% c( x4 _ .elseif ax == IDCANCEL 0 o8 q" f4 h) U8 f0 B' b* } invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL9 O" i* n0 ]/ F0 H0 w .elseif ax == ID_ABOUT 1 t0 }5 U( W: j0 I9 T3 ?. d invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框 / D. N8 L! R: b/ A4 Z) g/ W .endif 3 A6 X7 v2 }2 t2 p .else 3 z7 R5 T- V# z1 I, w5 w; f mov eax,FALSE% n& G, d/ q- f, P( H& _- P ret 4 J+ c2 J" E; R4 D5 c1 {) Z7 _ .endif + M. L4 [- i3 s9 v mov eax,TRUE 7 X; r" C: I/ N/ `3 | ret : a% }8 j9 z$ e# V, O% x% J # J4 t! n' f% l* L6 j, c_ProcDlgMain endp ! G# G+ i7 i& u B0 }! h8 P$ A 5 `) g4 }7 h- W& x;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ) Q7 H0 A8 n% {: Vstart:, {) u B$ e. C$ b% t ?/ ~# l invoke GetModuleHandle,NULL1 a) b7 Q# K3 @" I5 q3 b& U mov hInstance,eax: s$ I+ A/ Y% w6 H invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL ( \; H9 \" F7 [8 y1 r invoke ExitProcess,NULL: f6 L+ d3 E9 ?* q6 o% e ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$ ]3 p% i4 h9 H, f* [: H V end start I2 M+ r3 v) H: o* p* l. I& {5 K ' Z, d h$ C) a M& s1 @: W" p3 c% s 界面看下图片 8 g1 o+ k) O4 f0 b, `% [6 x4 G h' d0 L . a X* K/ E8 U! C2 N- C) _6 T% ]2 Y% Y h0 t0 s" U W; \ $ H7 C# d# |& }! Y7 \5 g$ v7 p8 T& I& K8 q! [ . A% Y5 S- W/ Z # X$ O* }2 w4 B0 F4 x/ J! [2 V
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
+ C- J4 z4 e* g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思
6 w, O  E' r* J* f' i1 A, J不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致
' e8 `& ~4 ?) u- P* W0 ?" i汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,
6 S* ~" D  e+ Y0 q" r, s再来一个强一点的原创瞧瞧 ^_^
* A& B! I/ p4 G5 T4 {- h
. L' J' U/ i  U- d% K8 _9 O# |1 \
9 I2 c, Y/ a6 [3 v% g/ W" l1 J" i" `, F. E- i
[此贴子已经被作者于2003-11-1 11:16:10编辑过]
5 P# f7 o6 w' O' A- Q" P$ w; Z

该用户从未签到

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

本版积分规则

关闭

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

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