Private Type OPENFILENAMEW
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As Long ' 筛选条件(Unicode字符串地址)
lpstrCustomFilter As Long
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As Long ' 存储选中文件的缓冲区地址(核心)
nMaxFile As Long ' 缓冲区最大长度(需足够大,适配多选)
lpstrFileTitle As Long
nMaxFileTitle As Long
lpstrInitialDir As Long ' 初始打开目录(可选)
lpstrTitle As Long ' 对话框标题(Unicode字符串地址)
Flags As Long ' 功能标志(多选、Unicode等)
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As Long ' 默认文件扩展名(可选)
lCustData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
' 2. 声明核心API函数(W后缀=Unicode版本,关键)
Private Declare Function GetOpenFileNameW Lib "comdlg32.dll" (pofn As OPENFILENAMEW) As Long
Private Declare Function lstrlenW Lib "kernel32.dll" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
' 3. 核心执行过程(按钮点击事件示例)
Private Sub Command1_Click()
Dim ofn As OPENFILENAMEW
Dim strFilter As String * 256 ' 筛选条件(Unicode类型)
Dim strTitle As String * 64 ' 对话框标题(Unicode类型)
Dim strFileBuf As String * 4096 ' 存储文件的缓冲区(4096足够存多个文件路径)
Dim strFiles() As String, i As Long, lPos As Long, lLen As Long
Dim Xstr As String
' 初始化筛选条件(格式:"筛选名\0文件后缀\0",最后以两个\0结尾)
strFilter = "所有文件|*.*|"
' 初始化对话框标题
strTitle = "API选择多个多语言文件"