windows系统API之GetOpenFileName简单使用实例 C++和汇编code

本文提供了一个使用C++和汇编语言实现的文件对话框示例,展示了如何利用Windows API函数GetOpenFileName来打开文件选择对话框,并限制只显示可执行文件。代码中详细配置了OPENFILENAME结构体,包括设置过滤器和标志,以确保只选择特定类型的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.C++程序:

#include<Windows.h>
#include<commdlg.h>

char szFilter1[2][16] = { "Excutable Files", "*.exe;*.com" };
char szFileNameOpen2[MAX_PATH] = { 0 };

int main(int argc, char *argv[])
{

	OPENFILENAME openFile = { 0 };
	openFile.lStructSize = sizeof(OPENFILENAME);
	openFile.hwndOwner = NULL;
	openFile.hInstance = (HINSTANCE)GetModuleHandle(NULL);
	openFile.lpstrFilter = (LPCSTR)szFilter1;
	openFile.lpstrFile = szFileNameOpen2;
	openFile.nMaxFile = MAX_PATH;
	openFile.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST;

	GetOpenFileName(&openFile);

	return 0;
}

2.汇编程序:

.386
.model flat,stdcall
option casemap:none
 
include    windows.inc
include    user32.inc
include    kernel32.inc
include    gdi32.inc
include    comctl32.inc
include    comdlg32.inc
include    advapi32.inc
include    shell32.inc
include    masm32.inc
include    netapi32.inc
include    winmm.inc
include    ws2_32.inc
  
includelib comctl32.lib
includelib comdlg32.lib
includelib gdi32.lib
includelib user32.lib
includelib kernel32.lib
includelib advapi32.lib
includelib shell32.lib
includelib masm32.lib
includelib netapi32.lib
includelib winmm.lib
includelib ws2_32.lib
 
.data
 
szFilter1    db    'Executable Files',0,'*.exe;*.com',0
szFileNameOpen2    db    MAX_PATH dup(0)    
 
.code

_openFile proc

local @stOp:OPENFILENAME

invoke    RtlZeroMemory,addr @stOp,sizeof @stOp

mov    @stOp.lStructSize, sizeof @stOp

invoke    GetModuleHandle,NULL
mov    @stOp.hInstance,eax

mov    @stOp.lpstrFilter,offset szFilter1
mov    @stOp.lpstrFile,offset szFileNameOpen2
mov    @stOp.nMaxFile,MAX_PATH
mov    @stOp.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
 
invoke GetOpenFileName,addr @stOp
ret

_openFile endp
 
start:
 
invoke _openFile
 
invoke MessageBox,NULL,addr szFileNameOpen2,NULL,MB_OK
 
invoke ExitProcess,0
 
end start

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值