首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

組語呼叫開啟檔案對話框(GetOpenFileName)完整範例

     編輯:組合語言

前言

當命令列無參數時,透過通用對話框讓使用者選擇檔案是標準作法。Windows 提供 GetOpenFileName API,配合 OPENFILENAME 結構即可輕鬆實現。本文提供完整 MASM 範例,包含過濾器設定、標題自訂、長檔名支援等細節。

關鍵結構 OPENFILENAME

ofn OPENFILENAME <0>
szFileName db 256 dup(0)
szFilterString db '可執行檔(*.exe)',0,'*.exe',0,0
szMyTitle db '請選擇要開啟的檔案', 0
szMessageTitle db '你選擇的檔案是',0

過濾器字串格式:描述\0模式\0\0,雙重空字元結尾。

初始化與呼叫流程

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

常用 Flags 說明

旗標用途
OFN_FILEMUSTEXIST檔案必須存在,否則報錯
OFN_HIDEREADONLY隱藏「唯讀」核取方塊
OFN_LONGNAMES支援長檔名(Win95+必要)
OFN_EXPLORER使用新型樣式對話框(Vista+預設)

進階應用

  • 多檔選擇:加入 OFN_ALLOWMULTISELECT,緩衝區需放大(如 4096 bytes),回傳格式為「目錄\0檔1\0檔2\0\0」。
  • 自訂預設目錄:設定 lpstrInitialDir。
  • 預設副檔名:設定 lpstrDefExt。

完整編譯指令

ml /c /coff /Cp openfile.asm
link /subsystem:windows openfile.obj

需連結 comdlg32.lib。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved