win32汇编环境,得到当前日期时间的例子

;运行效果

;win32汇编环境,得到当前日期时间的例子

;有2个函数可以使用,GetLocalTime和GetSystemTime,一般用GetLocalTime,得到本地时间,GetSystemTime的是系统时间,也叫世界时,专业方向的人用,我们一般也用不上。

;下列示例得到本地时间,同时加定时器,每秒更新,看起来像有个时钟在运行的样子

;直接抄进RadAsm可编译运行。重要部分加备注。

;下面为asm文件

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.386

.model flat,stdcall

option casemap:none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Include 文件定义

include windows.inc

include user32.inc

include kernel32.inc

includelib user32.lib

includelib kernel32.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 自定义函数声明

DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD ;对话框窗口函数

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 数据段

.data

DlgName db "MyDialog",0

szMsg db "提示",0

szFormat01 db "当前日期是:%d年%d月%d日 ",0

szWeek00 db " 星期日",0

szWeek01 db " 星期一",0

szWeek02 db " 星期二",0

szWeek03 db " 星期三",0

szWeek04 db " 星期四",0

szWeek05 db " 星期五",0

szWeek06 db " 星期六",0

szFormat02 db "当前时间是: %d:%d:%d",0

.data?

hInstance HINSTANCE ?

.const

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;Equ 等值定义

ICO_MAIN equ 1000 ;图标

IDC_VALUE01 equ 201

IDC_VALUE02 equ 202

ID_TIMER1 equ 1

; 代码段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.code

start:

invoke GetModuleHandle, NULL

mov hInstance,eax

invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL

invoke ExitProcess,eax

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

LOCAL @stTime:SYSTEMTIME ;定义1个名为@stTime的SYSTEMTIME 结构,里面包含了年、月、星期、天、小时、分钟、秒、毫秒这些成员,得到这些值后,直接使用就可以了

LOCAL @hYear,@hMonth,@hDay,@hWeek ;SYSTEMTIME结构中的wYear、wMonth这些成员是WORD 类型,就是2字节类型,所以定义时也用了WORD型

LOCAL @hHour,@hMinute,@hSecond

LOCAL @szBuffer256:byte

.if uMsg == WM_INITDIALOG

invoke LoadIcon,hInstance,ICO_MAIN

invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax

invoke GetLocalTime,addr @stTime

invoke RtlZeroMemory,addr @szBuffer,sizeof @szBuffer

xor eax,eax ;把eax清零,因为后面要取低2字节,需防止高2字节里有数据

mov ax,@stTime.wYear ;wYear、wMonth这些成员是WORD 类型,就是2字节类型,所以前面用ax对应2字节

mov @hYear,eax ;但是@hYear定义时默认的是DWORD型,即4字节,而上面的ax是2字节,不匹配,所以需用eax

xor eax,eax

mov ax,@stTime.wMonth

mov @hMonth,eax

xor eax,eax

mov ax,@stTime.wDay

mov @hDay,eax

invoke wsprintf,addr @szBuffer,addr szFormat01,@hYear,@hMonth,@hDay ;格式化年、月、日字符串到@szBuffer字符数组里去

mov bx,@stTime.wDayOfWeek ;wDayOfWeek是星期,但是数值,比如星期日是0,星期一是1,以此类推

.if bx == 0 ;如果是星期日,则把前面定义的星期日的字符串添加上去

invoke lstrcat,addr @szBuffer,addr szWeek00

.elseif bx == 1

invoke lstrcat,addr @szBuffer,addr szWeek01

.elseif bx == 2

invoke lstrcat,addr @szBuffer,addr szWeek02

.elseif bx == 3

invoke lstrcat,addr @szBuffer,addr szWeek03

.elseif bx == 4

invoke lstrcat,addr @szBuffer,addr szWeek04

.elseif bx == 5

invoke lstrcat,addr @szBuffer,addr szWeek05

.elseif bx == 6

invoke lstrcat,addr @szBuffer,addr szWeek06

.endif

invoke SetDlgItemText,hWnd,IDC_VALUE01,addr @szBuffer

invoke RtlZeroMemory,addr @szBuffer,sizeof @szBuffer

mov ebx,ebx

mov bx,@stTime.wHour

mov @hHour,ebx

mov ebx,ebx

mov bx,@stTime.wMinute

mov @hMinute,ebx

mov ebx,ebx

mov bx,@stTime.wSecond

mov @hSecond,ebx

invoke wsprintf,addr @szBuffer,addr szFormat02,@hHour,@hMinute,@hSecond ;格式化时、分、秒字符串到@szBuffer字符数组里去

invoke SetDlgItemText,hWnd,IDC_VALUE02,addr @szBuffer

invoke SetTimer,hWnd,ID_TIMER1,1000,NULL ;设定每隔1秒触发的定时器

.elseif uMsg == WM_TIMER ;处理定时器消息

mov eax,wParam

.if eax == ID_TIMER1

invoke RtlZeroMemory,addr @szBuffer,sizeof @szBuffer

invoke GetLocalTime,addr @stTime

mov ebx,ebx

mov bx,@stTime.wHour

mov @hHour,ebx

mov ebx,ebx

mov bx,@stTime.wMinute

mov @hMinute,ebx

mov ebx,ebx

mov bx,@stTime.wSecond

mov @hSecond,ebx

invoke wsprintf,addr @szBuffer,addr szFormat02,@hHour,@hMinute,@hSecond ;格式化时、分、秒字符串到@szBuffer字符数组里去

invoke SetDlgItemText,hWnd,IDC_VALUE02,addr @szBuffer

invoke GetDC,hWnd

.endif

.elseif uMsg == WM_CLOSE

invoke KillTimer,hWnd,ID_TIMER1 ;离开时记得清除定时器

invoke EndDialog, hWnd,NULL

.else

mov eax,FALSE

ret

.endif

mov eax,TRUE

ret

DlgProc endp

end start

;下面为rc文件内容

#include "resource.h" //提示缺少该文件,可以在资源里下载

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#define ICO_MAIN 1000 //图标

#define IDC_VALUE01 201

#define IDC_VALUE02 202

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ICO_MAIN ICON "Main.ico"

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//定义对话框

MyDialog DIALOG 10, 10, 205, 150

STYLE DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK

CAPTION "对话框程序模版"

FONT 12, "宋体"

BEGIN

LTEXT "0", IDC_VALUE01, 25, 50, 150, 8

LTEXT "0", IDC_VALUE02, 25, 80, 150, 8

END

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

相关推荐
水饺编程2 小时前
第1章:开发环境搭建,在 Windows 中安装 QEMU
c语言·汇编
AC赳赳老秦4 小时前
OpenClaw 数据引用规范自动生成:为公开数据构建可信来源标注与标准引用体系
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
AC赳赳老秦1 天前
数据采集全链路审计留痕:用 OpenClaw 实现合规审计与追溯
开发语言·汇编·python·php·swift·deepseek·openclaw
小雪崩3 天前
嵌入式学习 day60:ARM汇编——触摸屏与SPI
汇编·arm开发·学习
额额额对了3 天前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
AOI小白新手上路3 天前
4-3_ARM汇编_学习笔记
汇编·arm开发·学习
AC赳赳老秦4 天前
公开音频转写信息提取:OpenClaw 处理发布会与听证会文本并提取核心决策信息
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
AC赳赳老秦4 天前
财报附注表格精准提取:OpenClaw 从 PDF 年报附注挖掘隐藏明细,补齐财务分析维度
java·汇编·c++·python·青少年编程·deepseek·openclaw
AC赳赳老秦5 天前
公开 CSV 数据集批量处理实战:用 OpenClaw 高效完成下载、清洗与标准化分析样本生成
java·开发语言·汇编·c++·python·deepseek·openclaw
斑马13913 天前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm