用GlobalMemoryStatus查看内存信息

吼吼,总算进入内存和文件的章节了,,虽然略过了GDI和通用对话框等等的学习。。

本章第一个练手的程序:

.asm文件:

.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include gdi32.inc
includelib kernel32.lib
includelib user32.lib
includelib gdi32.lib
IDD_DIALOG1           equ                  100
IDC_STATIC              equ                    101
TIMER1                equ                        1
.data
.data?
hInstance    dd    ?
hWinMain    dd    ?
.const
szFormat    db    ’物理内存总数        %lu 字节’,0dh,0ah
db    ’可用物理内存        %lu 字节’,0dh,0ah
db    ’交换文件总大小        %lu 字节’,0dh,0ah
db    ’空闲交换文件大小    %lu 字节’,0dh,0ah
db    ’用户可用地址空间    %lu 字节’,0dh,0ah
db    ’当前空闲地址空间    %lu 字节’,0dh,0ah,0

.code
_ShowMemory    proc
local @stMemoryStatus:MEMORYSTATUS
local @szBuffer[1024]:byte
;pushad
mov @stMemoryStatus.dwLength,sizeof @stMemoryStatus
invoke GlobalMemoryStatus,addr @stMemoryStatus
invoke wsprintf,addr @szBuffer,addr szFormat,
@stMemoryStatus.dwTotalPhys,
@stMemoryStatus.dwAvailPhys,
@stMemoryStatus.dwTotalPageFile,
@stMemoryStatus.dwAvailPageFile,
@stMemoryStatus.dwTotalVirtual,
@stMemoryStatus.dwAvailVirtual
invoke SetDlgItemText,hWinMain,IDC_STATIC,addr @szBuffer
;popad
ret
_ShowMemory endp
_ProcDlgMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam
mov eax,uMsg

.if eax==WM_TIMER
call _ShowMemory
.elseif eax==WM_INITDIALOG
push hWnd
pop hWinMain
invoke SetTimer,hWnd,TIMER1,1000,0
call _ShowMemory
.elseif eax==WM_CLOSE
invoke KillTimer,hWnd,TIMER1
invoke EndDialog,hWnd,NULL
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
rc文件较简单,此处略去。。

第一次nmake的时候出现instruction or register not accept in current CPU mode的奇怪错误,百思不得其解,将代码复制到新文件后编译就通过了,,,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>