如果從命令行參數中不能取得文件名,那麼我們就可以使用一個通用對話框(打開文件對話框)要求用戶選擇一個文件,從而取得要操作的文件對象。
---------------------------------------------------------------------
;文件名:16.asm,顯示一個打開對話框
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include comdlg32.inc
includelib kernel32.lib
includelib user32.lib
includelib comdlg32.lib
.data
ofn OPENFILENAME <0> ;打開文件對話框要用到該結構
szFileName db 256 dup(0)
szFilterString db '可執行文件(*.exe)',0,'*.exe',0,0 ;文件過濾器字符串
szMyTitle db '請選擇要打開的文件', 0
szMessageTitle db '你選擇的文件是',0
.code
GetFileNameFromDialog proc
mov ofn.lStructSize,sizeof ofn ;結構的大小
mov ofn.lpstrFilter,offset szFilterString ;文件過濾器
mov ofn.lpstrFile,offset szFileName ;文件名的存放位置
mov ofn.nMaxFile,256 ;文件名的最大長度
mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_LONGNAMES
mov ofn.lpstrTitle,offset szMyTitle ;“打開”對話框的標題
invoke GetOpenFileName,addr ofn ;顯示打開對話框
ret
GetFileNameFromDialog endp
Start:
call GetFileNameFromDialog
.if eax!=0 ;若選擇有文件,則顯示出來
invoke MessageBoxA,NULL,addr szFileName,addr szMessageTitle,NULL
.endif
invoke ExitProcess,NULL ;結束程序
end Start
--------------------------------------------------------------------------
程序運行時的界面:
選擇一個文件後的顯示