下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2003-10-31 23:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> i& a3 {4 T& S, ^& O9 N/ [ ; EnableButton ALL For bbs.xsclub.com V: b/ }- r1 I7 v e ; by 游侠无极限 * {: o" X+ A1 V( c2 `;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8 Y% J5 H' Z$ u$ F ; EndableButton.asm% _, g. v+ D, w ; 基于对话框资源 , c+ W4 }& T1 J0 [;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 S$ K. |$ I# _6 U/ q& S) f .386( D x! e( }+ R" t5 K: K" [6 a .model flat, stdcall $ I/ x( j+ H5 r1 o2 i option casemap :none 5 E1 m7 \2 H; y9 W7 \6 Q;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> h X0 X& i6 R2 H ; Include 文件定义 9 R+ Q9 f; k* r5 w0 S3 k, [: I: g;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + V( j- }- ~( b7 T& Z1 Jinclude windows.inc& S* m% G: j$ o" o7 x V$ [ include user32.inc 1 u2 p5 o$ t+ A7 Gincludelib user32.lib 8 {, R8 L/ Q+ [3 s$ E/ [include shell32.inc" K) y4 M4 E% F4 r includelib shell32.lib ( [/ g, y: a* E3 X6 {" Sinclude kernel32.inc; l# J4 Z( O* l+ V9 m includelib kernel32.lib2 e9 W: O. ]* u! m9 a5 W7 Q ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>% c) P1 h! K: Z ; Equ 等值定义 . |0 m' a( A; Q8 N8 E! \;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: d( ]4 f* h- A5 L4 o* F% ~5 \% b ICO_MAIN equ 104 ;图标# M# u8 [6 G6 X6 I$ E h- r DLG_MAIN equ 101 ;对话框 7 s6 F2 B6 d' oEDIT_MAIN equ 1002 ;编辑框 B4 \1 ~# A+ _ ID_ABOUT equ 1000 ;关于按钮+ q& T: N. p# n2 U* N7 H; M7 Q ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ' |. Y/ A8 {" T: s# w* C. T7 u; 数据段+ W7 t/ w( ?; g$ ` ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8 e3 @, S& H' L .data?1 u* N$ E# b+ N( Z 9 t' u6 [6 r+ |& p% B" ?5 phInstance dd ?. W7 o3 t9 Z6 G/ j6 J* E& R/ q hHook dd ? 0 m& E8 J8 P' l* ehWndMain dd ?* J1 P& n; {6 | IsStop dd ? + e/ | s% z/ Y* U+ b# r, Y" s @9 M* P: s .const * p( t& J2 `0 _) |3 a1 a- A# oszStart db '启动',0 - ]6 f; R6 q: f7 ]# PszStop db '停止',0* B" C6 f {& _3 Z0 i4 r% @* S u: r szCaption db 'EnableButton',0, c+ F" t0 i" m) {" T0 I) E szInfo db '版权没有 03.8.20 游侠无极限制作',09 p% a' [$ I, ~5 }* a szErr db '安装钩子失败,原因不明',0 6 v* ^' p j' ^$ y, H+ w zszWnd db '%lxH',0, z: R0 O: r$ C" x/ l; W ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> & D! Z# |+ {8 t( T4 u* C9 j; 代码段 8 l9 z# q0 ?$ B4 g% W, i6 V/ E# _;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3 ^' b( ?& B) g) |& C! ] .code- Q1 H, w) b! h0 _( z ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3 W1 b8 W1 y, Y. L( }2 D;钩子回调函数- w( l/ Z- W8 x0 a9 N0 |6 N ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: R- f4 o: g4 ?5 b* H/ h9 r! s _HookProc proc _dwCode,_wParam,_lParam ) _1 r5 Q. t( T+ K- o local @szBuffer[100]:byte ' P, y5 k' x. w8 ~( F# ~* T5 e invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam ;钩子链传递 ( u* D: q" K6 R5 @ pushad ' N6 o8 f0 h- F+ B3 H: ? .if _dwCode == HC_ACTION ;Windows要移除一条消息时 : u" _2 L! ?9 y; a' l& k& O4 S mov ebx,_lParam. D# C' R& E$ Z& C, ^- ^- e, { assume ebx:ptr EVENTMSG * t8 {; `% C1 ? .if [ebx].message == WM_LBUTTONDOWN) {* i4 J; M% P9 J mov eax,[ebx].hwnd ;取得当前鼠标所在控件句柄, Y2 K0 A1 J+ [( `, E; v8 N invoke wsprintf,addr @szBuffer,addr szWnd,eax2 W; K2 Q7 \' _9 G8 P+ o: j { invoke SetDlgItemText,hWndMain,EDIT_MAIN,addr @szBuffer ;显示句柄! m$ B) t2 r1 _. p2 M* n" y+ S invoke IsWindowEnabled,[ebx].hwnd ;判断控件是否无效! d2 P6 }& |( T/ R .if eax == FALSE ( v9 r7 E. c& a invoke EnableWindow,[ebx].hwnd,TRUE ;使控件可用 1 g+ F+ k5 c `2 H( j% ]- g' A .endif0 t) Q6 Z2 j I! d" ?8 [ ;.endif N8 y; A' m/ Q3 L1 [+ } .endif ' Y' u& x0 V. F" { assume ebx:nothing7 M# F1 q' _* F1 p5 _3 v( {) F/ X+ H .endif( x* ?; l; Z, T, l : p/ v8 S% G( n0 d$ g0 \" G popad # u6 F# G. N1 _; _ xor eax,eax 3 r2 u* X6 M8 ~6 `( H ret% n2 F6 t+ e! N: l j _HookProc endp # m8 [3 d$ S+ g8 h* S;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 O1 B- N6 v' C& O7 x/ b: |- q2 r. t' ?1 U _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam1 l) ]' M2 m0 }! n K H1 c; E. H9 i ( W. ?" X; ^0 b. V: d# b mov eax,wMsg 7 m8 K! X& G8 `% P- q5 K .if eax == WM_CLOSE ; a, o9 b9 F$ ?! i5 ~ .if IsStop != TRUE) A* O5 B) I- j- ]" S invoke UnhookWindowsHookEx,hHook ;卸载钩子 / r' c+ V, `% A3 k8 V .endif / F& ?4 V- C6 n6 O invoke EndDialog,hWnd,NULL 3 _1 @' `# K/ {0 B* e .elseif eax == WM_INITDIALOG 3 |/ m7 `8 u5 V% [9 j7 ` invoke LoadIcon,hInstance,ICO_MAIN . ~- y3 I2 N" j* C1 ^4 f# @ invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax 9 A! a7 \. E0 {# S invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;窗口最顶层7 i& x+ m% Q) M3 e mov IsStop,TRUE 3 u* _7 m" m$ U" D z0 J push hWnd - s& I. `9 L+ o! {* ]" ^* Q [ pop hWndMain! o' J) C6 {+ C .elseif eax == WM_COMMAND ! d% O# G/ `7 U2 J; R mov eax,wParam- H/ o- c+ w9 G) P4 @0 s5 o$ I& R .if ax == IDOK ( A- c# ~: V+ r+ b .if IsStop == TRUE 0 C, R) `$ }- v! I* {' b6 R9 i invoke SetDlgItemText,hWnd,IDOK,offset szStop 5 _( n7 V8 h% ?( M8 M invoke SetWindowsHookEx,WH_JOURNALRECORD,addr _HookProc,hInstance,NULL ;挂钩,日志记录钩子0 t7 K& T `! |7 a. E .if eax # x0 \; T' L, A. M6 t- t mov hHook,eax / P' w" [1 [$ | O2 m7 k% V; A .else ;挂钩失败 ; ~% s% H ]0 P8 u* `, i invoke MessageBox,hWnd,offset szErr,offset szCaption,MB_OK or MB_ICONWARNING . Q' L u# U- _$ A .endif+ `8 L+ B5 O. j; i mov IsStop,FALSE 8 N) L6 P: P b# j1 d+ d T .else& F9 ]! N% [. a t invoke SetDlgItemText,hWnd,IDOK,offset szStart : s9 }( b" J5 L7 ~/ I5 D invoke UnhookWindowsHookEx,hHook0 k% m$ s1 q+ h/ e; [) f mov IsStop,TRUE 3 s" J9 {& Z- Y .endif + k5 n' O0 Q4 z+ Q& z6 R* w3 `3 O .elseif ax == IDCANCEL' q/ j- l8 G% {$ i1 l e% p invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL4 z- X$ m8 I( J/ J7 Y .elseif ax == ID_ABOUT 3 m Z) @: C, _4 G9 d invoke ShellAbout,hWnd,offset szCaption,offset szInfo,NULL ;关于对话框 ! u+ Z" ?: w2 D) z0 S .endif ) y/ {& `7 V, z9 ]2 ^# V .else / a' n3 c7 D3 P+ ?1 I mov eax,FALSE : a, c5 E3 v: Z5 O ret ) N, g8 c) z# z: S. p* r6 @1 I( I .endif , H3 n# E3 z) [5 O/ F mov eax,TRUE 8 K7 j9 C0 D9 c8 @3 O ret( i# c' j: N: Q6 ^% g0 j7 M , ]3 R( @' _8 I _ProcDlgMain endp& l0 d) A p* Y) J 3 h* I/ L3 W$ n- h% ]4 H* Z ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 v- ]! I: \% A7 r/ ^: | start: ( u' K0 [% |* |' Y invoke GetModuleHandle,NULL7 n* r1 m6 `$ `! u mov hInstance,eax* ?: A* p' K( Y8 V; v$ F invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL% B. {/ ]6 F' V' N, Y2 S invoke ExitProcess,NULL , n9 j9 }3 D! p1 o;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9 e/ z% V! F6 A9 F$ t( K1 L end start0 l% v0 d/ h4 [ ; G+ s# a* J# g) D0 M! b% }9 o" ?4 f 界面看下图片 2 E) c7 K6 `" Y. Q. e. n5 D: ? 4 c5 C3 o" c, z' v0 s v% j: T8 z* x. l( u, l9 p) F 8 S" z- g0 I% {6 r # u3 J( E4 L( ^- |( n 5 j, F3 i7 D5 _. H! |( @: M, D 0 w$ V+ U% k; w+ R( g9 V R4 e, c. v5 k& E* p* o, Z0 \$ l: K1 @
[此贴子已经被作者于2003-10-31 23:37:05编辑过]
6 ]/ d2 @# G% N1 e5 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
bigfoot 该用户已被删除
2
发表于 2003-11-1 11:10:00 | 只看该作者
搞了个WH_JOURNALRECORD hook,大概是把变灰的控件Enable,有点意思
* T% ]2 r& p% {' Y不过这类界面程序实在不是汇编的强项,用了大量的invoke  ,整个程序结构看上去和c别无二致9 \3 [, O' x: C) c6 L
汇编的强项不在这里,楼主如果想显耀汇编的强大,这个例子不怎么,
1 h/ ?) J! e* g* V* a7 ^. U再来一个强一点的原创瞧瞧 ^_^
! k) Q1 G# v, r/ b
1 V. k) T# r. `1 \1 J: a  ]( J$ W( X) p) j- A
  Y; d4 `& z! ^( g1 Q
[此贴子已经被作者于2003-11-1 11:16:10编辑过]

" K# {  j2 I& N1 d. v" {

该用户从未签到

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

本版积分规则

关闭

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

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