|
|
|
|
Win32·J½s±Ðµ{¤Q
±z¬O²Ä
380ÓÂsÄýªÌ
·§z
Windows ªºp®É¾¹¬O¤@ºØ¿é¤J³]³Æ¡A¥¦¶g´Á©Ê¦a¦b«ü©wªº¶¡¹j®É¶¡³qª¾À³¥Îµ{¦¡¡C¥¦¥i¥H¥Î¦V«ü©wµøµ¡µo°e WM_TIMER ®ø®§©ÎªÌ½Õ¥Î«ü©wªº¹Lµ{¨Ó°õ¦æ¥Î¤áªºµ{¦¡¡Cp®É¾¹ªºÀ³¥Î¥Dn¥]¬A¤U±¤@¨Ç¦a¤è¡G ®ÉÄÁµ{¦¡ - ÅãµM¡A³o¬Op®É¾¹³Ìª½±µªºÀ³¥Î¡C
¦h¤u - ¦pªGµ{¦¡¦³¤j¶qªº¸ê®Æ³B²z¡A°£¤F¥Î¦h½uµ{ªº¿ìªk¡AÁÙ¥i¥H¥Îp®É¾¹¡A¦b¨C¤@Óp®É¾¹®ø®§¤¤³B²z¤@¤p¶ô¤º®e¡C
©w®ÉÅã¥Üµ{¦¡ªºª¬ªp - p®É¾¹´N¬Û·í©ó Dos ½sµ{¤¤ªº¦Û¤v±¾±µ¦b int 1ch ¤W±ªºn©w®É³B²zªºµ{¦¡¡A¥¦¥i¥H©w®ÉÅã¥Üµ{¦¡¹B¦æªº±¡ªp¡A¦pµo°e¤F¦h¤Ö¤º®e¡A±µ¦¬¤F¦h¨ì¤º®eµ¥µ¥¡C
¦b¹CÀ¸µ{¦¡¤¤¨Ï¥Îp®É¾¹¥i¥H®ø°£¦b¤£¦P³B²z¾¹¤U¥Î©µ®É¨Ó«O«ù³t«×¤@P©Ò³y¦¨ªº»~®t¡C
¥Î©ó¸ê®Æ¬yµ{³B²z - ¦bµÀW¡BµøÀWªº¼½©ñ¤¤¡A»Ýn¹j¤@¬q®É¶¡³B²z¤@¬q¸ê®Æ¡C
Á`ªº¨Ó»¡¡A¦b Dos ¤U¹ê²{ºë½T©w®Éªº°ß¤@¤èªk¬O¦b int 1ch ®ÉÄÁ¤¤Â_¤¤³B²zµ{¦¡¡A¦ý§A¨Ï¥Î°_¨Ó¥²¶·¿í¦u«Ü¦hªº³W½d¡A¦Ó¦b Windows ªºp®É¾¹¤¤¡A§A¥i¥H¥Î SetTimer ¨ç¼Æ¤À°t¤£¤î¤@Óªºp®É¾¹¡A¤ñ¦p»¡¡A¦b§Aªº¤å¥»½s¿èµ{¦¡¤¤¡A§A¥i¥H¨Ï¥Î¤@Ó¶¡¹j1¬íªºp®É¾¹¨Ó¦bª¬ºAÄæ¤¤Åã¥Ü®ÉÄÁ¡A¦P®É¤À°t¤@Ó10¤ÀÄÁªºp®É¾¹¨Ó¹ê²{©w®É¦sÀɪº¥\¯à¡Cp®É¾¹¹ê»Ú¤W¬O Windows ¹ï®ÉÄÁ¤¤Â_ªº¤@ºØÂX®i¡A¥¦ªº¥»½èÁÙ¬O°ò©ó®ÉÄÁ¤¤Â_ªº¡A©Ò¥H§A¹ê»Ú¤WµLªk§âp®É¾¹ªº¶¡¹j³]¸m¨ì55²@¬í¥H¤U¡A¥t¥~¡Ap®É¾¹ªººë«×¤]¬O¥H55²@¬í¬°¿¼Æªº¡A¤ñ¦p»¡¡A§A³]¸m¤F¤@Ó1¬íªºp®É¾¹¡A¥¦¹ê»Ú¤W¬O¦b¨C989²@¬íªº®ÉÔµo¥Íªº¡C©M¦b Dos ¤U¨Ï¥Î®ÉÄÁ¤¤Â_¡Awindows ªºp®É¾¹ÁÙ¦³¤U±¤@¨ÇnÂI¡G
¦b Dos ¤¤¡A§Aªºµ{¦¡ÀH®É¥i¯à³Q int 1ch ¥´Â_¡A¦Ó¦bWindows ¤¤¡AWindows ³q¹L WM_TIMER ®ø®§§âp®É¾¹®ø®§©ñ¤J¥¿±`ªº®ø®§¦î¦C¤¤¡A©Ò¥H§A¤£¥²¾á¤ß§Aªºµ{¦¡¦b§Oªº³B²z¤¤³Qp®É¾¹¥´Â_¡C
¤£¥i¯à¦³¦P®É¨â±ø¥H¤Wªº WM_TIMER ®ø®§¡A¦pªG¦b¤@ÓÁÙ¦b®ø®§¦î¦C¤¤¡Aµøµ¡¦A±o¨ì¤@±ø WM_TIMER ®ø®§¡A¨â±ø®ø®§·|³Q¦X¨Ö¬°¤@±ø¡A©Ò¥H¦bµ{¦¡¤ñ¸û¦£ªº®ÉÔ¥i¯à·|¥á¥¢ WM_TIMER ®ø®§¡C
WM_TIMER ®ø®§ªº¯Å§O¬O«Ü§Cªº¡Aµ{¦¡¥u¦³¦b®ø®§¦î¦C¤¤¨S¦³¨ä¥L®ø®§ªº±¡ªp¤U¡A¤~·|±µ¦¬ WM_TIMER ®ø®§¡A§A¥i¥H³q¹L¤U°¨¤èªkÅçÃÒ¡G¦b¤@Ó³]¸m¤Fp®É¾¹ªºµøµ¡¤W«ö¦í¼ÐÃDÄæ²¾°Êµøµ¡¡A§A·|µo²{p®É¾¹°±¤î¤F¤u§@¡A·í§AÃP¶}·Æ¹««á¡A¦b³oÓ¹Lµ{¤¤¥á¥¢ªº WM_TIMER ®ø®§¨Ã¨S¦³³Q¸É¤W¡A©Ò¥H¦pªG§A³]p¤@Ó®ÉÄÁµ{¦¡¡A§A¤£¯à¨Ï¥Îp®É¾¹®ø®§¨Óp¼Æ¡A¦Ó¥²¶·¦b®ø®§¤¤¨C¦¸Àò¨ú¥¿½Tªº¨t²Î®É¶¡¡C
Á¿¤F³o»ò¦hp®É¾¹ªº¯SÂI¡A¤U±¬Op®É¾¹¬ÛÃöªºAPI¡A§A·|µo²{°£¤F¦b¨Ï¥Î¤¤nª`·Nªº³o¨Ç¯S©Ê¡Ap®É¾¹ªºAPI¯u¬O¤S¤Ö¤S²³æ¡G
«Ø¥ßp®É¾¹
SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);
hWnd ¬O windows µo°e WM_TIMER ªºµøµ¡¡AnIDEvent ¬Op®É¾¹ªº½s¸¹¡A¦b WM_TIMER ¤¤¥X²{¦b wParam °Ñ¼Æ¤¤¡A¥Î¨Ó°Ï¤À¦b¦hÓp®É¾¹ªº±¡ªp¤U¡A³o±ø®ø®§¬O¥ÑþÓp®É¾¹²£¥Íªº¡CuElapse ¬Op®É¾¹¶¡¹jªº²@¬í¼Æ¡A¦pªG§An³]¸m¤@Ó1¬íªºp®É¾¹¡A³oÓÈ´N¬O1000¡AlpTimerFunc ¬O³B²zp®É¾¹®ø®§ªº¹Lµ{¡A¦pªG³oӰѼƤ£¬O NULL¡Awindows ¦b¨ì®É¶¡«á·|½Õ¥ÎlpTimerFunc «ü©wªº¹Lµ{¡A½Õ¥Îªº°Ñ¼Æ¬O CALLBACK TimerProc(hwnd,WM_TIMER,iTimerID,dwTime)¡AiTimerID ¬Op®É¾¹ ID¡AdwTime ¬O¨t²Î®É¶¡¡F¦pªG lpTimerFunc °Ñ¼Æ¬O NULL¡AWindows ·|§â WM_TIMER ®ø®§©ñ¤J®ø®§°j°é¤¤¡A®ø®§ªº hWnd ¬O²Ä¤@ӰѼƤ¤«ü©wªº hWnd¡A¤]´N¬O»¡¦V³oÓµøµ¡µo°e¤F WM_TIMER ®ø®§¡C
¥t¥~¡A¦pªG§Aªºµ{¦¡¨S¦³µøµ¡¡A§A¤]¥i¥H¥Î³oºØ¿ìªk«Ø¥ßp®É¾¹¡Ginvoke SetTimer,NULL,NULL,uElapse,TimerProc¡A¨ç¼Æ·|ªð¦^¤@Ó¨t²Î©w¸qªº TimerID¨Ñ§A¦b KillTimer ¤¤¨Ï¥Î¡C
¨ú®øp®É¾¹
KillTimer(
HWND hWnd, // handle of window that installed timer
UINT uIDEvent // timer identifier
);
¨ú®øp®É¾¹¥u»Ý¹ïÀ³ SetTimer ®Éªº hWnd ©M uIDEvent ½Õ¥Î KillTimer ¨ç¼Æ´N¦æ¤F¡C
¦b¥»¸`ªº¨Ò°Æµ{¦¡¤¤¡A§Ú¦b¹ï¸Ü¤è¶ô¤¤ªº WM_INIT ®ø®§¤¤¥Î SetTimer «Ø¥ß¨âÓp®É¾¹¡A®É¶¡¤À§O¬O500ms ©M 200ms¡AµM«á¦b¶¡¹j0.5¬íªºp®É¾¹®ø®§¤¤§ó´««ö¶s¤Wªº¹Ï¤ù¡A¦b¶¡¹j 0.2 ¬íªºp®É¾¹®ø®§¤¤§ó´«¼ÐÃDÄæ¤Wªº¤p¹Ï¥Ü¡A§A´N¥i¥H¬Ý¨ì°Êµeªº®ÄªG¤F¡C
®Ú·½µ{¦¡ - ·J½sì©lÀÉ®×
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Programmed by ù¶³±l, bigluo@telekbird.com.cn
; Website: http://asm.yeah.net
; LuoYunBin's Win32 ASM page (ù¶³±lªº½sµ{¼Ö¶é)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ª©¥»¸ê°T
; ·J½s±Ðµ{ªþ±a¨Ò°Æµ{¦¡ - p®É¾¹ªº¨Ï¥Î
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
include kernel32.inc
include comctl32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDI_MAIN equ 1
IDI_MOON1 equ 2
IDI_MOON2 equ 3
IDI_MOON3 equ 4
IDI_MOON4 equ 5
IDI_MOON5 equ 6
IDI_MOON6 equ 7
IDI_MOON7 equ 8
IDI_MOON8 equ 9
DLG_MAIN equ 1000
ID_MOON equ 1001
ID_TIMER1 equ 1
ID_TIMER2 equ 2
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¸ê®Æ¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
dwCounter1 dd ?
dwCounter2 dd ?
hIcon1 dd ?
hIcon2 dd ?
hIcon3 dd ?
hIcon4 dd ?
hIcon5 dd ?
hIcon6 dd ?
hIcon7 dd ?
hIcon8 dd ?
szBuffer db 256 dup (?)
.data
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¥N½X¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;********************************************************************
_ProcDlgMain proc uses ebx edi esi, \
hWnd WORD,wMsg WORD,wParam WORD,lParam:DWORD
mov eax,wMsg
;********************************************************************
.if eax == WM_CLOSE
invoke KillTimer,hWnd,ID_TIMER1
invoke KillTimer,hWnd,ID_TIMER2
invoke EndDialog,hWnd,NULL
;********************************************************************
.elseif eax == WM_INITDIALOG
mov edi,offset hIcon1
mov ebx,IDI_MOON1
mov ecx,8
@@:
push ecx
invoke LoadIcon,hInstance,ebx
cld
stosd
inc ebx
pop ecx
loop @B
invoke SetTimer,hWnd,ID_TIMER1,500,NULL
invoke SetTimer,hWnd,ID_TIMER2,200,NULL
invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,hIcon1
;********************************************************************
.elseif eax == WM_TIMER
.if wParam == ID_TIMER1
inc dwCounter1
.if dwCounter1 == 8
mov dwCounter1,0
.endif
mov eax,dwCounter1
shl eax,2
add eax,offset hIcon1
mov eax,[eax]
invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
.else
inc dwCounter2
.if dwCounter2 == 8
mov dwCounter2,0
.endif
mov eax,dwCounter2
shl eax,2
add eax,offset hIcon1
mov eax,[eax]
invoke SendDlgItemMessage,hWnd,ID_MOON,BM_SETIMAGE,IMAGE_ICON,eax
.endif
;********************************************************************
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;********************************************************************
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0
invoke ExitProcess,NULL
;********************************************************************
end start
µ{¦¡ªº¤ÀªR©MnÂI
¦³¤F¤W±ªº¤¶²Ð¡A³oÓµ{¦¡¬O«Ü®e©ö¬ÝÀ´ªº¡A¦b WM_TIMER ®ø®§¤¤¡A³q¹L wParam ¤¤ªº TimerID ¥i¥H°Ï¤À¬OþÓp®É¾¹²£¥Íªº®ø®§¡C¦b WM_CLOSE ®ø®§¤¤¡A³q¹L KillTimer ¨Ó¨ú®øp®É¾¹¡C¥»µ{¦¡¤¤ªºªº¹Ï¥Ü©w¸q¦b¸ê·½Àɮפ¤¡A¦b¹ï¸Ü¤è¶ô«Ø¥ßªº®ÉÔ¡A¥ý¥Î LoadIcon ¸Ë¤J¡AµM«á¬°¨âÓp®É¾¹¤À§O«O¦s¤@ӹϤù½s¸¹ dwCounter1 ©M dwCounter2¡A¦bp®É¾¹®ø®§¤¤¤À§O¥Î WM_SETICON ©M BM_SETIMAGE ®ø®§¨Ó¹ïµøµ¡¼ÐÃDªº¹Ï¥Ü©M«ö¶sªº¹Ï¥Ü¶i¦æ³]¸m¡C
¹ê¥Î¬ÛÃö·j´M: map nds bus ¹CÀ¸ lg she cx it ati tv
|

〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨û¡A²{¬°ºaÅA·|û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
·°ó§Þ³N¤u§@«Ç
|
|
|
|