下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8 P O9 `' W( K0 R ; EnableButton ALL For bbs.xsclub.com' Q* V( e2 p$ {0 G/ h- y( {4 b ; by 游侠无极限$ w! ^8 N/ V# \0 ^. ] ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> % t% I- }4 {- i r; EndableButton.asm7 V6 Y* u7 i) C4 g" G9 F ; 基于对话框资源+ e. b2 z) v* ^" z' y c* T ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9 F8 U4 r7 G9 u4 F9 W: E .386 1 P& A5 Z4 i' ~& t( E .model flat, stdcall 9 ?. C, j) Z# @& G* G2 ` option casemap :none 8 o: |# ~/ `3 M# E5 @;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> . L) O! B. S/ O2 i. w; Include 文件定义, i" o- x1 O2 g8 f5 B2 {$ d+ J% c% z ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 6 p! ]: ]9 l4 d" o/ D) d* Vinclude windows.inc , j X2 B0 @' F1 xinclude user32.inc* {) [( d, k* P8 p, H. U( } includelib user32.lib4 x6 |. J/ d: B* P% f% `% x include shell32.inc ) e! O/ T3 ^/ Q+ k) O9 ~includelib shell32.lib ( B! l0 i6 L& z/ a+ ~include kernel32.inc: q: Q* a7 ]: a _3 T3 o includelib kernel32.lib, b w. o: L. k' P4 |0 W ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 [2 S* n0 o" ]0 v9 G; Equ 等值定义5 K0 l: P! j% e9 Q. n( P ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! C& O4 _6 X9 p7 sICO_MAIN equ 104 ;图标 . l$ d$ k4 x0 _7 j) K9 JDLG_MAIN equ 101 ;对话框# ?" |& _0 U! c, e( n EDIT_MAIN equ 1002 ;编辑框/ `$ E0 L* C8 y! k0 S ID_ABOUT equ 1000 ;关于按钮( N! Z J4 Y) @6 i ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 5 j1 p: N7 D. ]* C; 数据段7 z. t( m' ?8 b H- v ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9 R1 B9 I4 z( I2 G! g8 s .data?) A- v' v( @6 f1 X0 s' N1 v / g+ |) ~+ ?8 x& b hInstance dd ? / v$ e5 C! a& |1 h* H' qhHook dd ?" M' ?/ M' J6 G3 W/ X/ s% R hWndMain dd ?8 {& p8 L0 j+ V/ X, r4 ~ IsStop dd ? X& r$ }% Z0 K. v3 \% t$ D0 H . H1 ^: d8 @. ^3 }3 Z! m4 y1 l. o .const 1 o9 c$ m- W. I8 Z: i$ uszStart db '启动',0: |$ b6 |' Z* A1 ^ C szStop db '停止',0 3 `8 k6 i( o6 DszCaption db 'EnableButton',08 B$ \. P9 H( W8 J! ~6 W2 T5 z szInfo db '版权没有 03.8.20 游侠无极限制作',0 # \) A; m2 {- }( }0 V; \% V$ YszErr db '安装钩子失败,原因不明',0+ \7 E$ P5 o/ c y) Z5 O I: j szWnd db '%lxH',0: }6 q3 Q! t5 u7 T3 N) `) ^ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>! g. ^$ K6 W) G ; 代码段5 G7 b+ l- g8 V3 T% G. r ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; n+ L; e" ^% M6 L4 F& P2 b. u .code & \( m( z; ]8 X1 @7 k1 C7 p% B: {8 A;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 7 b/ h6 |& U4 |;钩子回调函数 + U6 @/ ]' P# H) w" R;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>4 i) [9 \9 r3 I9 U5 q _HookProc proc _dwCode,_wParam,_lParam3 K4 I7 @, N: f- d9 E7 b4 w3 z6 y local @szBuffer[100]:byte , d$ A. l9 e1 j: _ invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递; f, W3 c0 `% g pushad 7 P0 @4 B. s2 w& p3 V8 g, k" n .if _dwCode == HC_ACTION ;Windows要移除一条消息时! o% H7 f8 n" n mov ebx,_lParam& d. f8 B Q4 S" u; t& h" ? assume ebx:ptr EVENTMSG* p$ k5 K: I7 U( k3 S. _3 {0 j- ]3 s2 u .if [ebx].message == WM_LBUTTONDOWN: }- {% _* f2 K mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄 " J1 M( A% ~% M' D invoke wsprintf,addr @szBuffer,addr szWnd,eax7 C1 S' C* { r6 P% \! E" y" z invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄 5 q$ A; x9 L: e1 d invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效 1 k7 O6 e j4 V# X1 H) s .if eax == FALSE 5 g- j! W5 _; S8 h invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用1 K# q: c& x5 T/ P) g: N .endif . c: T4 k( X$ P/ p ;.endif 5 ?* ?7 Q# ^2 k0 x .endif 2 {# A( e8 `2 f# b assume ebx:nothing+ {( p- Q) e( A/ E .endif ; j$ P; T e- W7 n* L & n! K) U: M6 F5 x$ W2 @ popad " \; v( V# i3 m% V% i% w$ v xor eax,eax* ^1 S' k* `( x* C' \4 o) Z6 ~$ M ret - |4 E; g. o" ^7 B7 `_HookProc endp 9 O1 L. G7 G$ F. f$ o o, T0 a;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>4 j2 k8 f, I; f. n ! K8 M$ R; k1 {7 U1 |_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam 1 l0 |; `! c( T3 S# _/ T! R7 v% \4 _( N4 _5 B mov eax,wMsg+ q$ a1 S0 p. J% s. n0 ^7 o .if eax == WM_CLOSE J- U: d: Z& f' o+ Q# R .if IsStop != TRUE5 ~! s- l4 g2 O7 S invoke UnhookWindowsHookEx,hHook ;卸载钩子 $ m( H; P4 z, R .endif- E; I1 q: l m7 ] invoke EndDialog,hWnd,NULL% l: C. S, R' d7 s .elseif eax == WM_INITDIALOG ; j/ E8 {5 Q) | invoke LoadIcon,hInstance,ICO_MAIN b5 D/ b% Z7 U: G3 F invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax+ v' f( ~& H" N5 a7 `0 F* S invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层 " o" x3 v, L5 v( F' ]! I/ N mov IsStop,TRUE3 Y3 t5 v0 q5 j y8 n" t push hWnd! y; s' [4 o; [( a8 Z pop hWndMain: i+ c9 F" X2 h6 T& d2 p1 N4 P .elseif eax == WM_COMMAND0 S+ F6 r$ P# n mov eax,wParam , A; ?: W4 [5 a$ B/ L; k& V" x# s6 J .if ax == IDOK! n; k8 E- d3 s j) e. Q .if IsStop == TRUE5 F& `# V) O. _* L1 n$ R7 S invoke SetDlgItemText,hWnd,IDOK,offset szStop / r& O# O/ Q1 s5 l' j' {3 Z, B invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子& v- w+ S- P; n( A* r2 q .if eax $ `: g' j2 x( _3 f mov hHook,eax. Q- q0 O+ _! I! t @; g .else ;挂钩失败& k( \1 @6 p- Z invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING 6 q9 @( l- F$ e1 a. T6 y y* ? .endif' t3 g* Z0 A: ^5 r, S8 n mov IsStop,FALSE , Y" w8 z3 y* b .else 8 x; S& a0 z+ [. e, z/ c, m invoke SetDlgItemText,hWnd,IDOK,offset szStart: `4 G5 h" z. O# c6 m invoke UnhookWindowsHookEx,hHook y A$ Y5 _1 g mov IsStop,TRUE/ b4 C% i% g# u- z .endif' j+ [4 Y7 Q, ]3 U; h5 c .elseif ax == IDCANCEL% h9 X1 M' G2 x( @ invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL6 D' p. v6 A5 }0 | .elseif ax == ID_ABOUT + E: t6 n- d6 L: [ invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框( K. U9 |6 V% ? .endif 0 ?* O( Z; E: h. O2 ` g .else8 Z$ c. C+ K5 d+ |% ` mov eax,FALSE- e l# u. h7 I a4 D6 g ret & Z' T8 @) Z$ u% w) Y& A% k .endif 1 q, R E# H0 [- l mov eax,TRUE $ g R( b8 Z6 F, N- E& I) |6 } ret ( d. F2 D, s9 P' h8 n" Q( Q: Q) l8 m5 \; F _0 ? _ProcDlgMain endp7 J& u- j" V: C3 M 3 `4 [; ]0 L8 x' G$ j ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! o7 z; `* M" B) S( i, @start: 2 _0 U; D& h9 O' s9 I; A invoke GetModuleHandle,NULL3 p3 t! h" p) w( J0 [' f7 k: A mov hInstance,eax 0 g# n; |$ i$ y( ^/ b( o6 Y invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL" a* {, S; @" o; X e4 n invoke ExitProcess,NULL 8 P7 M* X/ Q/ V3 {9 q;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> : I" _2 W* B% B+ |5 c: H# f end start2 Z7 V6 U& y: x7 C7 f6 l0 v8 G ; h1 Q4 n2 I& O, |" z! r# T. @. I7 o7 H9 Z1 s5 h+ b [ 界面看下图片2 n/ T: W4 P$ w' V. [$ e * k. `/ Y9 P. ]9 X, {! A 3 j! M+ g; B" A. F, o& @0 M$ K4 o2 ^$ z, ^$ n( m 1 f* `1 T5 W2 O0 o; r% _$ R( t0 K . ? v$ l, n$ E) | i$ f 4 y- ~: W. g7 [% [+ j: J 0 b' p8 g$ N+ _8 }
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
+ d. w q4 A8 B. _/ J+ l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思) _+ ~$ I8 n& `& p0 U" y
不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致
4 B, e* N7 o3 o( R3 b0 H汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,: M  [' G, N; p( V2 k  P
再来一个强一点的原创瞧瞧 ^_^4 L1 [: Y4 z+ u/ S& U9 E/ A
+ E# A) \7 h( \( S% d

. B4 c: |; ?; M& R, [8 [
+ P( X: P% v# F5 V/ c0 U
[此贴子已经被作者于2003-11-1 11:16:10编辑过]

$ z( s8 H' O# E# F+ n# G% {) V

该用户从未签到

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

本版积分规则

关闭

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

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