下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" z1 o% d2 ] Q# e ; EnableButton ALL For bbs.xsclub.com5 J: i: l& F9 b4 a$ L5 m; A ; by 游侠无极限3 b; T9 q/ D" v( [+ @ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7 a6 i. h9 q+ p- o' b P ; EndableButton.asm , t; l2 X* E1 Z2 d5 T8 Z; 基于对话框资源# W; f! }) N/ v1 d6 z' | ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> U1 d1 X3 ^: o, K0 D7 J* u .3860 l X+ P6 u! [: Z2 o6 u0 K& m/ H( k0 @ .model flat, stdcall! } A$ w: n# S option casemap :none# H% B: D! Q( R" d8 v7 E% y1 Q ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 M+ C) [& b8 ]+ _ `% _ E ; Include 文件定义3 P, [4 f( C1 {, ] S6 z1 r9 ~ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0 i3 M; [( `3 E6 O& |% }8 Y include windows.inc' r1 l- O6 k+ ^ s include user32.inc* N+ b3 g5 |9 t/ Z3 P. w) @ includelib user32.lib; X. n) ^2 p" Z. m3 s$ \ include shell32.inc' D. B F4 d4 K7 t& `/ b includelib shell32.lib0 k0 {. C1 Y4 ?9 ~0 Y( {1 @ include kernel32.inc5 s/ e4 Q+ [. v includelib kernel32.lib/ C' c; `' s! T ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " K- u! L/ g2 u9 O t; Equ 等值定义 ) V$ ~/ y/ j! y, P* V$ t! a;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9 _3 ]5 S1 \5 J- ?( d# x) K ICO_MAIN equ 104 ;图标0 C. P8 ^/ r9 n( J* j5 W3 U DLG_MAIN equ 101 ;对话框 3 q& Q+ C% z* P! w. N& N9 v6 uEDIT_MAIN equ 1002 ;编辑框0 v. r# ~+ {! [' Z' W& j ID_ABOUT equ 1000 ;关于按钮 G0 \" S; n7 j# x! U;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> , B! ~% [5 b' h- v1 O2 Q9 |; 数据段 * b4 b7 M6 ^/ d1 X# W, r;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6 b& @0 W5 J) [- c, G- i5 N .data? , }5 o T% l2 r6 R2 D . I7 x# j5 v8 b+ R* ^hInstance dd ?) e; W3 @8 @) w hHook dd ?/ c. O, p6 ~! K5 M7 Z/ W5 [ hWndMain dd ? , X* ~% T0 @7 S; J4 [1 D D' GIsStop dd ?# z: D% P! v; K2 q( C6 S7 w + D3 ]7 \3 N& h! [2 R. t8 q' d .const9 w/ h3 {* d6 o% Y- O szStart db '启动',0! f5 G% P0 c: t3 q* o+ c- c szStop db '停止',0* t1 t! y; N; G7 U6 Z$ s szCaption db 'EnableButton',0 * K6 \- g4 p7 A' |5 PszInfo db '版权没有 03.8.20 游侠无极限制作',01 }. E/ I' W5 a: a. w4 b% C3 Y* v szErr db '安装钩子失败,原因不明',0 ) `. \. X+ a1 a" A! O$ Q2 ^+ OszWnd db '%lxH',0 & v1 l' j* b$ P, x;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>( ?& i7 G# e0 K( | r b F ; 代码段 \, {3 E6 s8 ?: a1 V N' D2 N ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$ h, m# W' q! n1 q .code # a% l0 ^) x5 \) D;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* W4 C p1 h. Z- e ;钩子回调函数 # {0 y( q x% a8 ^3 }9 b;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' ~4 q# u$ d: d! d8 W/ G& C9 w R _HookProc proc _dwCode,_wParam,_lParam 5 S4 w- Q" ^6 ^- z9 J1 C a" I local @szBuffer[100]:byte C) W* ?3 n" H/ `& e, y invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递) }, ?7 K8 ^9 m. H" i pushad% F( T% f0 H1 p; X' S .if _dwCode == HC_ACTION ;Windows要移除一条消息时 0 F! Y6 Z8 N% s) q' q# j mov ebx,_lParam * X A" A/ n; ?& ], i2 W assume ebx:ptr EVENTMSG / [6 u, q. T |8 z* \: V .if [ebx].message == WM_LBUTTONDOWN - E. Y$ q+ x" d& E3 s: z mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄- O! Z8 S9 \# |5 D" d invoke wsprintf,addr @szBuffer,addr szWnd,eax5 C$ R) ~. ]7 t6 \1 f) K% S invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄$ X3 c- {8 q: k1 q# z) o invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效 2 c+ v) T' k, T4 C, g' q5 A# v .if eax == FALSE ( b2 D8 H; y1 R0 [' e: H5 `, ` invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用 & B) X$ u+ R! H0 F/ n; G .endif9 v; x1 j. O6 W ;.endif* g) q) _1 \) w: W, A .endif 5 v& [9 j" L, C0 T$ L& s! W$ [ assume ebx:nothing/ F2 e! j3 a" K& ]0 [1 r .endif& [4 d2 H) @# E 6 W+ D0 O( J3 C( @5 P/ o0 ] popad* P5 M$ R& U+ | xor eax,eax + }5 p. ?; V9 p4 i ret( k- o: o8 P( x$ G7 x* } _HookProc endp ; o4 ~, x1 u% s. g4 a. {# s. E;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0 ~4 P: d6 J) O; A6 i4 P 0 e$ R# v: P5 R0 ^" v5 J# R _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam4 p; N, i) @! u, j5 x& h # }8 h& E6 a1 }* F3 P4 M- D1 { mov eax,wMsg " ~; c$ c6 v2 z8 z$ @4 D/ ~ .if eax == WM_CLOSE 0 `: v% G5 l" K7 a2 m* h .if IsStop != TRUE : \& P$ M) f& m4 P( H7 s invoke UnhookWindowsHookEx,hHook ;卸载钩子0 d/ c: R1 ^* k% _ .endif 6 {5 g0 |" `, B; } invoke EndDialog,hWnd,NULL& [8 R: G b; L& h- L6 | .elseif eax == WM_INITDIALOG; f1 T0 H1 }( B; a2 [ invoke LoadIcon,hInstance,ICO_MAIN 5 s, l2 q* ~0 T" { invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax+ M, {2 f. G9 N invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层 ; w& r! p+ p7 I mov IsStop,TRUE' ?! g1 E7 g. J push hWnd - D3 q1 |) p1 ]: K( u pop hWndMain {; D' D$ {( ^( s( }9 b .elseif eax == WM_COMMAND * q* Q7 W" `7 I mov eax,wParam4 T U$ H/ r/ |7 x; w .if ax == IDOK - X+ X B( g9 w5 d ~6 B) P& V .if IsStop == TRUE9 l$ {# q" x) K6 H# O; n+ g6 o, h2 u invoke SetDlgItemText,hWnd,IDOK,offset szStop * ]7 w- c! k' s Z( \0 t invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子 7 o) D+ K0 g5 r- v; N' s- D/ Z .if eax 5 p/ ~4 x7 ^" d mov hHook,eax5 O) U: h' _4 W" H .else ;挂钩失败 8 w+ B- a/ Q, r4 G/ e$ c( c) \ invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING ! I% V9 X. c; ] .endif * t2 n p3 i d/ l mov IsStop,FALSE& W+ l) P4 @/ b- t& U* x) h .else8 O) ?3 n0 U% C5 ^& Y% e- k invoke SetDlgItemText,hWnd,IDOK,offset szStart9 L" d. \, c1 d: \ invoke UnhookWindowsHookEx,hHook / v+ w$ E/ G9 S5 O! R mov IsStop,TRUE1 T$ ]4 V! D% B8 {) ]% ~ .endif2 K/ i( c' n k0 `1 ]9 ` .elseif ax == IDCANCEL $ j+ y% L6 v0 y$ u5 g invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL3 r; r+ }' y5 u3 H6 ?6 @8 c' T .elseif ax == ID_ABOUT / H M" a) v2 m' l+ K& x invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框( _5 G- C) X8 c. ^% u .endif. ^; Z1 G# \" ~" C R3 _, h6 `4 | .else$ c+ }8 A) D' _ mov eax,FALSE+ ? H0 [# V, \$ y5 C' Z/ I ret6 s( E0 r. W# w5 F+ o .endif ( R1 N, S+ u5 p) C mov eax,TRUE 3 ~# B5 N# A, b, S7 I ret F; t! c, _2 `! P9 x4 i 9 l7 \" T) @) I% {7 d& D _ProcDlgMain endp' _% @3 Y5 P: \, \! m ' N, a, C5 q' @3 { ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; d5 Q0 W! D9 I8 H1 `0 B9 sstart:: z+ J7 ]# ?1 E0 A! V/ @, U invoke GetModuleHandle,NULL& b$ w, F( I8 W' m1 {2 S! P+ T9 x5 ] mov hInstance,eax/ A" U% a2 O" f: F; m invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL) [8 s' J, [. `, { invoke ExitProcess,NULL 0 G- }, n7 w' ?5 E u3 F7 _% _;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$ U) i( i: n4 H5 u4 k, t end start 9 c& {: r) r5 W, G; j: \ ( I u& ^1 ?$ l; H8 M' v . U# C% m' K2 V7 V6 M# q8 p. N' Y* |3 c界面看下图片 8 \" R9 A. |5 { ; l* l+ Y% {8 @2 v3 ?; t9 q8 w0 T: Y0 p " ]# O2 g7 D, |- h* O' [5 o: D6 _! k$ q! W 7 w4 l, C- J; i/ b) U - O9 z2 ?( k) O# V* k8 ]2 I8 C1 Y- u8 b) d; B
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
4 i4 h+ x- c% k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

该用户从未签到

3
发表于 2003-11-19 00:14:00 | 只看该作者
bigfoot,留个QQ怎么样。
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思0 W; ?8 ~& N+ n" g2 e- E
不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致: |* g+ @# E9 Q5 \% l7 I! [
汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,& \  T9 d+ M( V1 ]- n
再来一个强一点的原创瞧瞧 ^_^
0 E7 E; K: C# ?( ~( y/ E$ J' I) L5 K8 }, _7 b$ a% ]
# G8 R' H0 d' M4 z+ D0 h2 m
4 B) J* i3 j- l1 _+ W9 Q! U
[此贴子已经被作者于2003-11-1 11:16:10编辑过]
! v: z; Y3 U7 I. h8 v) F( w2 e
关闭

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

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