下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 8 b r5 } {1 T; EnableButton ALL For bbs.xsclub.com 9 g2 w# R2 P% w0 A% e; by 游侠无极限 , ?% _! E4 G; v8 U! J. r: O( };>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8 D1 ?2 q) d1 X! v8 H7 b ; EndableButton.asm ' ~# Z, S0 S8 T+ B( Q/ |" D; 基于对话框资源 4 Y% W( M8 i- E: M H5 K;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>4 F4 g4 h/ j) m, M2 w3 I' ^" e% _. N .386 l7 k: j1 l% A3 A .model flat, stdcall- O% F4 [9 T; Q8 D option casemap :none' L+ \/ D0 w4 ~. h q ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" w: f5 S7 I' x* }. {: ~' l ; Include 文件定义 ( s. ~& b' ~$ [;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0 G1 A; y6 Z7 b* s include windows.inc , Z6 b+ o/ h. g! z1 ^. winclude user32.inc ( \: r% p) k k Q2 S: X6 nincludelib user32.lib ) [9 a: ~' h( @6 binclude shell32.inc ! a8 ~: N3 q/ H4 i7 u4 I: kincludelib shell32.lib K5 y3 ~3 N7 y& a! c, H2 Sinclude kernel32.inc& K0 X F4 o% j8 v( R includelib kernel32.lib o& W% D. a* k ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - X1 e9 I3 y, O$ f3 B9 f7 C; Equ 等值定义 ; C7 e8 p% B: V! M;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # j: v% U' Z+ \* J EICO_MAIN equ 104 ;图标 ; M9 |7 N0 E$ R. z/ f4 qDLG_MAIN equ 101 ;对话框 % L) e) W5 G2 V6 A4 L3 O+ @EDIT_MAIN equ 1002 ;编辑框 ( B* I* i' j8 v7 f4 \7 U8 ZID_ABOUT equ 1000 ;关于按钮 Q4 A2 b2 |$ g7 F1 ^, ] ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> , N+ `" g- x8 T; N2 C; 数据段* a; N/ |+ e& L. e ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, P/ m! z0 m) z% @" u .data? 3 O* Z4 \1 `: f/ v% f! I0 k- x. Y. ~1 E k6 ` hInstance dd ? , G! Z* S+ }1 e$ Q" H) j+ PhHook dd ? ; `: x3 w& F( U0 o' I) zhWndMain dd ? + c& n, l% M# a/ e, }- h' _IsStop dd ?2 q8 L' B" y; F R4 | 5 r+ b) x( Q( M m# ^! v( T- c .const( s: ?) o. _# ?4 F! R, F% o2 H$ H% r szStart db '启动',0 ; R& W2 w3 ]# [' I' ~6 F) A- FszStop db '停止',0 , I6 o# q; S/ R* p. q4 { Q6 oszCaption db 'EnableButton',0 $ ]# B x/ j+ L( \8 |szInfo db '版权没有 03.8.20 游侠无极限制作',0 - Q. a! j+ c1 s. EszErr db '安装钩子失败,原因不明',02 z+ S1 a% E& X szWnd db '%lxH',0 % ~2 m; A/ B0 C r+ V;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - x8 w Y- Y. H/ M; 代码段/ _" C( ~$ e! v0 @ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 8 d- k) p4 s" a .code `7 [$ M4 g1 d ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- q% o( j: }9 a4 m ;钩子回调函数( r/ z( r# B( c8 P7 T# u ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- \% k! i v6 Y! [+ ] _HookProc proc _dwCode,_wParam,_lParam& S, v4 @9 [& y, N$ k local @szBuffer[100]:byte ' |- ?* i6 }. A6 O x* o2 Q) _ invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递 - Y( K: c- z% R: U5 l pushad # C0 i8 Q( f' D .if _dwCode == HC_ACTION ;Windows要移除一条消息时6 o' K1 c# W8 B/ X1 V$ M4 q/ S& j5 ` mov ebx,_lParam $ l ], t& O7 }& f) V. J assume ebx:ptr EVENTMSG 8 U/ c% k5 M# l1 \6 E- x3 d .if [ebx].message == WM_LBUTTONDOWN $ E8 q: b. ?4 E* z mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄! v0 u6 N% J# @ invoke wsprintf,addr @szBuffer,addr szWnd,eax ' Y7 u$ y$ S' l7 L2 X( v invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄 5 J+ J( ?) `1 B/ ^- { @: l. b invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效- u) p* A# g* d3 \ .if eax == FALSE2 K/ _& A2 C0 o9 Z; i0 g1 z* }1 t7 P invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用# Q0 O8 |. A# f; t( D1 d: ` .endif - G* ?& x7 w7 \8 C" p4 U) u& B ;.endif; v+ \+ @' A" _7 I* S .endif' K0 t* P8 G+ \: s V assume ebx:nothing4 {) `4 Z( z8 @, [" @: w4 b5 I .endif( K0 z a5 ~+ }% t6 ]5 [ ( \. v2 a$ ^5 t; w/ |* X popad+ z% s8 }* y R$ K3 _ xor eax,eax ' N$ Q6 h ]+ P0 y1 H7 X8 W" P8 j2 Z ret2 X' E. {( W( E2 }7 V4 e _HookProc endp: }% S# H6 K; r/ e5 { ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; \; G! b( `5 H7 O/ _/ J4 J 5 i+ }/ ~7 h' l3 `_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam 8 v% T; {- v6 `' h/ t# s; X : N1 z# G4 c8 N6 L7 p. N6 J mov eax,wMsg * Q! Q. `# m# [7 [ .if eax == WM_CLOSE " g4 H& j) {/ a$ B9 g% } Y .if IsStop != TRUE0 h4 R) Q* k; y invoke UnhookWindowsHookEx,hHook ;卸载钩子 8 J y. r) a3 ~' z .endif' l. e* [0 R5 p invoke EndDialog,hWnd,NULL / v4 a& o. I, J$ F7 m& Q0 n' w0 B .elseif eax == WM_INITDIALOG7 B5 P# E& X) T* G invoke LoadIcon,hInstance,ICO_MAIN , O4 v, V, i- S& B invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax' R$ x7 g$ S$ U; O7 k2 W invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层8 ]" r3 `& z5 j9 u- Y. l mov IsStop,TRUE: S, c9 v _$ G push hWnd F& {8 {5 i. p/ W& n* \$ }$ c1 q pop hWndMain2 k( K- U' w9 [" t4 f# ` .elseif eax == WM_COMMAND2 Y$ x* E# i1 i6 e, b/ ^& d mov eax,wParam % H$ O( X; E: O6 o .if ax == IDOK: F- O9 O( _ e5 T- Y .if IsStop == TRUE 7 s$ @( @2 ^! l* U) Q invoke SetDlgItemText,hWnd,IDOK,offset szStop 6 `& L. E9 P5 u. \3 U; ]$ l: G invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子. E9 _6 l& u0 r/ u0 N .if eax 6 S8 i$ B# h' \% _ mov hHook,eax # i) X( o" l6 `$ z6 j. P .else ;挂钩失败6 I6 C9 ?$ m7 a3 C2 V2 I- Z invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING : X# N R# Y, E. I/ E .endif; z$ e6 l9 b7 y- A r# |7 k mov IsStop,FALSE3 b- J) l" Z5 v$ f, \ .else( K- I0 O/ Q* U4 w( |" p9 L invoke SetDlgItemText,hWnd,IDOK,offset szStart - h9 i4 b! G- f# X+ i invoke UnhookWindowsHookEx,hHook6 B4 c" u; o+ E8 m mov IsStop,TRUE% R2 E C2 w5 |; V7 h: l1 s .endif / ]4 k' F6 u( y6 N& ]% f. [ .elseif ax == IDCANCEL. L: e2 U# ^& W4 I/ C n invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL 5 f8 ]4 \! L! a6 L5 t .elseif ax == ID_ABOUT( k5 b1 d6 P2 Q2 o invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框% W3 D; p4 r, j1 w- E .endif. h0 H: q: O P% r/ B+ r1 `. n .else7 L1 G" }2 ]0 q) t2 L. S mov eax,FALSE 0 |" a* S' `- @" b! N" ^0 X. X ret- t8 P a6 r( ~# R, R .endif " L! o6 o# a- r- T# l$ B& v! x mov eax,TRUE7 B/ e$ q! {: Z o ret - Q: ?' s: R' ~& o6 ~" w7 e/ t% `8 j _ProcDlgMain endp' {+ d# B+ C( e $ p, L& A8 o* q5 p, j% R0 a ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6 e! B" Y- n" n+ s& g start: 2 s8 f3 z, S( ]6 W# v( t invoke GetModuleHandle,NULL) e* ]% P+ Y1 i& w# @ mov hInstance,eax0 e9 E8 n6 k7 e# g: H+ i invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL ! x% N4 I2 u) o6 O( M2 L invoke ExitProcess,NULL' l" K' U1 u9 G; e1 |0 j" W ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8 z: U' {0 v0 H$ ` o* }8 M9 x end start( N3 B5 L4 H h8 ^ ( | N# R# a2 L" D1 R& N : }% T# q' D. y* G0 p界面看下图片 b& w; m% K3 G" t 7 x' ?! o0 a3 v4 Q1 O Z2 W- p Y8 \9 x" ?. i- V# }3 N0 H# d8 P* q 4 C* {* t* @8 l9 } ! b8 z* o; G' p) I6 H! u8 V4 U, R) x8 l, W3 H) A/ C5 [ . ^' T7 k/ H8 a9 w; T( p
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
8 S" o0 L( S9 k* Q) q4 ?. A* N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思$ O. F1 {! k1 x$ n5 ?: \
不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致3 R: P* v* E7 K& Q5 X
汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,
4 e3 W5 v1 {4 g  m+ A% k再来一个强一点的原创瞧瞧 ^_^  }1 j3 _: q4 R

" `% ?# j, k! G5 n
; r$ r/ ?: }% F1 `2 w+ T, N' M3 a
[此贴子已经被作者于2003-11-1 11:16:10编辑过]

1 e1 E4 a- q4 W( q: z8 H# \. s

该用户从未签到

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

本版积分规则

关闭

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

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