📄 timer.asm
字号:
include head.inc
ModalDlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDD_DIALOG equ 101
IDC_TEXT equ 1000
.data
WeekNum db "天一二三四五六",0
TitleName db "定时器",0
crlf db 13,10,0
year db "年",0
month db "月",0
day db "日",0
hour db "时",0
minute db "分",0
second db "秒",0
week db "星期",0
template db "%-2.2d %s",0
FillZero db "0",0
.data?
temp db 40 dup(?)
buffer db 200 dup(?)
time SYSTEMTIME <>
.code
start:
invoke DialogBoxParam,NULL,IDD_DIALOG,NULL,addr ModalDlgProc,NULL
invoke ExitProcess,eax
ModalDlgProc proc uses ebx hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
.if uMsg==WM_INITDIALOG
invoke SetTimer,hWnd,1,1000,NULL
.elseif uMsg==WM_TIMER
invoke GetLocalTime,addr time
mov ax,time.wYear
movzx eax,ax
invoke dwtoa,eax,addr temp
invoke lstrcpy,addr buffer,addr temp
invoke lstrcat,addr buffer,addr year
mov ax,time.wMonth
movzx eax,ax
invoke dwtoa,eax,addr temp
invoke lstrcat,addr buffer,addr temp
invoke lstrcat,addr buffer,addr month
mov ax,time.wDay
movzx eax,ax
invoke dwtoa,eax,addr temp
invoke lstrcat,addr buffer,addr temp
invoke lstrcat,addr buffer,addr day
xor eax,eax
mov ax,time.wDayOfWeek
mov bl,2
mul bl
lea ebx,WeekNum
add eax,ebx
invoke lstrcpyn,addr temp,eax,3
invoke lstrcat,addr buffer,addr week
invoke lstrcat,addr buffer,addr temp
invoke lstrcat,addr buffer,addr crlf
mov ax,time.wHour
movzx eax,ax
invoke wsprintf,addr temp,addr template,eax,addr hour
invoke lstrcat,addr buffer,addr temp
mov ax,time.wMinute
movzx eax,ax
invoke wsprintf,addr temp,addr template,eax,addr minute
invoke lstrcat,addr buffer,addr temp
mov ax,time.wSecond
movzx eax,ax
invoke wsprintf,addr temp,addr template,eax,addr second
invoke lstrcat,addr buffer,addr temp
invoke SetDlgItemText,hWnd,IDC_TEXT,addr buffer
.elseif uMsg==WM_CLOSE
invoke EndDialog,hWnd,FALSE
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
ModalDlgProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -