WIN32汇编语言教程:第15章 注册表和INI文件 · 15.2 INI文件的操作(2)
{
RTEXT "Section", -1, 4, 7, 30, 8
EDITTEXT IDC_SEC, 39, 5, 78, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
RTEXT "Key", -1, 4, 23, 30, 8
EDITTEXT IDC_KEY, 39, 21, 78, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
RTEXT "Value", -1, 4, 39, 30, 8
EDITTEXT IDC_VALUE, 39, 37, 78, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
LTEXT "当前 INI 文件内容:", -1, 8, 57, 141, 8
EDITTEXT IDC_INI, 6, 71, 232, 91, ES_MULTILINE | ES_AUTOVSCROLL |
ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "删除 &Section", IDC_DEL_SEC, 122, 4, 57, 14
PUSHBUTTON "删除 K&ey", IDC_DEL_KEY, 183, 4, 57, 14
PUSHBUTTON "读取 &Key", IDC_GET_KEY, 122, 20, 57, 14
PUSHBUTTON "保存 Ke&y", IDC_SET_KEY, 183, 20, 57, 14
}
//##################################################################
汇编源文件Ini.asm的内容如下:
.386
.model flat, stdcall
option casemap :none
;####################################################################
; Include 文件定义
;####################################################################
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;####################################################################
; Equ 等值定义
;####################################################################
ICO_MAIN equ 1000
DLG_MAIN equ 1000
IDC_SEC equ 1001
IDC_KEY equ 1002
IDC_VALUE equ 1003
IDC_INI equ 1004
IDC_DEL_SEC equ 1005
IDC_DEL_KEY equ 1006
IDC_GET_KEY equ 1007
IDC_SET_KEY equ 1008
;####################################################################
; 数据段
;####################################################################
.data?
hInstance dd ?
hWinMain dd ?
szProfileName dd MAX_PATH dup (?)
szBuffer1 db 32760 dup (?)
szBuffer2 db 32760 dup (?)
.const
szFileName db '\Option.ini',0
szSecPos db 'Windows Position',0
szKeyX db 'X',0
szKeyY db 'Y',0
szFmt1 db '%d',0
szFmtSection db '[%s]'
szCrLf db 0dh,0ah,0
;####################################################################
; 代码段
;####################################################################
.code
;####################################################################
; 枚举全部 Section 和全部 Key
;####################################################################
_EnumINI proc
local @szBuffer[256]:byte
invoke SetDlgItemText,hWinMain,IDC_INI,NULL
;********************************************************************
; 读取 Section 列表并循环处理
;********************************************************************
invoke GetPrivateProfileSectionNames,addr szBuffer1,\
sizeof szBuffer1,addr szProfileName
mov esi,offset szBuffer1
.while byte ptr [esi]
invoke wsprintf,addr @szBuffer,addr szFmtSection,esi
invoke SendDlgItemMessage,hWinMain,IDC_INI,\
EM_REPLACESEL,FALSE,addr @szBuffer
;********************************************************************
; 读取 Key 列表并循环显示
;********************************************************************
invoke GetPrivateProfileSection,esi,addr szBuffer2,\
sizeof szBuffer2,addr szProfileName
mov edi,offset szBuffer2
.while byte ptr [edi]
invoke SendDlgItemMessage,hWinMain,\
IDC_INI,EM_REPLACESEL,FALSE,edi
invoke SendDlgItemMessage,hWinMain,IDC_INI,\
EM_REPLACESEL,FALSE,addr szCrLf
invoke lstrlen,edi
add edi,eax
inc edi
.endw
invoke lstrlen,esi
add esi,eax
inc esi
.endw
ret
_EnumINI endp
;####################################################################
_GetPosition proc
local @szBuffer[512]:byte
;********************************************************************
; 将当前路径和 ini 文件名组合起来
;********************************************************************
invoke GetCurrentDirectory,MAX_PATH,addr szProfileName
mov esi,offset szProfileName
invoke lstrlen,esi
mov ecx,offset szFileName
.if byte ptr [esi+eax-1] == '\'
inc ecx
.endif
invoke lstrcat,esi,ecx
;********************************************************************
; 读存放在 ini 文件中的数据
;********************************************************************
invoke GetPrivateProfileInt,addr szSecPos,\
addr szKeyX,50,addr szProfileName
push eax
invoke GetPrivateProfileInt,addr szSecPos,\
addr szKeyY,50,addr szProfileName
pop ecx
invoke SetWindowPos,hWinMain,HWND_TOP,ecx,eax,0,0,SWP_NOSIZE
ret
_GetPosition endp
;####################################################################
_SavePosition proc
local @szBuffer[512]:byte,@szRect:RECT
上页:第15章 注册表和INI文件 · 15.2 INI文件的操作(1) 下页:第15章 注册表和INI文件 · 15.2 INI文件的操作(3)