明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8639|回复: 14

如何调用API函数打开文件保存对话框和文件打开对话框,返回文件路径???

[复制链接]
发表于 2012-2-26 15:09:57 | 显示全部楼层 |阅读模式
如何调用API函数打开文件保存对话框和文件打开对话框,返回文件路径,网上找的放在VBA里面就用不了,我不用窗口,要直接在模块代码里面实现!到底要注意什么呢?谢谢大家!
发表于 2012-3-4 08:24:06 | 显示全部楼层
(vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1 0)
用它试试吧,前面再添加下面的这两句:
(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2012-2-27 17:57:21 | 显示全部楼层
?不用控件,就有函数实现,大侠帮帮我啦!
发表于 2012-3-4 08:25:38 | 显示全部楼层
代码里的msn是提示选择文件夹的字符串,自己设定
 楼主| 发表于 2012-3-16 15:17:07 | 显示全部楼层
已经搞定了!成功调用API函数打开和保存文件,呵呵!可以说是标准模式了!
发表于 2013-7-4 21:33:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2013-9-22 09:53:07 | 显示全部楼层
       '打开文件对话框结构
        Public Type OPENFILENAME
         lStructSize As Long
         hwndOwner As Long
         hInstance As Long
         lpstrFilter As String
         lpstrCustomFilter As String
         nMaxCustFilter As Long
         nFilterIndex As Long
         lpstrFile As String
         nMaxFile As Long
         lpstrFileTitle As String
         nMaxFileTitle As Long
         lpstrInitialDir As String
         lpstrTitle As String
         Flags As Long
         nFileOffset As Integer
         nFileExtension As Integer
         lpstrDefExt As String
         lCustData As Long
         lpfnHook As Long
         lpTemplateName As String
       End Type

Private Const DLG_SHOWOPEN = 1
Private Const DLG_SHOWSAVE = 2
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
        "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long



Public Function GetDlgRtnFileName(ByVal iAction As Integer, vOpenFile As OPENFILENAME, ByVal hWndOw As Long, ByVal sFilter As String, _
                           ByVal sTitle As String, ByVal DefExt As String, ByVal InitFileName As String) As String '用API函数获得打开对话框和保存对话框返回的文件名

         Dim lReturn As Long
         
         vOpenFile.lStructSize = Len(vOpenFile)
         vOpenFile.hwndOwner = ThisDrawing.HWND32 ' hWndOw 'Form1.hwnd
'         vOpenFile.hInstance = app.hInstance

         vOpenFile.lpstrFilter = sFilter
         vOpenFile.nFilterIndex = 1
         If iAction = 2 Then
            vOpenFile.lpstrFile = InitFileName & String((257 - Len(InitFileName)), 0)
         Else
            vOpenFile.lpstrFile = String(257, 0)
         End If
         vOpenFile.nMaxFile = Len(vOpenFile.lpstrFile) - 1
         vOpenFile.lpstrFileTitle = vOpenFile.lpstrFile
         vOpenFile.nMaxFileTitle = vOpenFile.nMaxFile
         vOpenFile.lpstrInitialDir = ThisDrawing.Path '& "\"
         vOpenFile.lpstrTitle = sTitle '"使用对话框API而不是控件" '"Use the Comdlg API not the OCX"
         vOpenFile.Flags = 2
         vOpenFile.lpstrDefExt = DefExt
         Select Case iAction
                Case DLG_SHOWOPEN
                     lReturn = GetOpenFileName(vOpenFile)
                Case DLG_SHOWSAVE
                     lReturn = GetSaveFileName(vOpenFile)
                Case Else   'unknown action
                     Exit Function
         End Select

         If lReturn = 0 Then
            GetDlgRtnFileName = "Cancel" 'MsgBox "用户按下Cancel按钮" '"The User pressed the Cancel Button"
         Else
            GetDlgRtnFileName = Trim(Left(vOpenFile.lpstrFile, InStr(1, vOpenFile.lpstrFile, Chr$(0), vbBinaryCompare) - 1))

         End If
End Function
发表于 2013-12-15 21:00:16 | 显示全部楼层
wwswwswws 发表于 2013-9-22 09:53
'打开文件对话框结构
        Public Type OPENFILENAME
         lStructSize As Long

请问函数怎么用?
vOpenFile 代表什么?
发表于 2013-12-17 09:37:13 | 显示全部楼层
这两个函数的参数就是这个结构,在用的时候使用者要定义一个变量,所以vOpenFile是定义的一个这个OPENFILENAME的变量,请参考下面来使用:

Dim vvOpenFile As OPENFILENAME '你的结构变量定义
Dim sSaveFileName As String  '你取回的文件名
Dim sFileName As String         '初始化文件名(可以先初始化给定一个全路径文件名,也可以不给)
Dim ssFilter As String             '文件类型过滤

ssFilter = "所有文件(*.*)" & Chr(0) & "*.*" & Chr(0)
sSaveFileName = GetDlgRtnFileName(2, vvOpenFile,  ThisDrawing.hwnd, ssFilter, "保存文件", "*.*" & Chr(0), sFileName)

如果是64位系统, ThisDrawing.hwnd要变成ThisDrawing.hwnd32

点评

64位cad根本没有hwnd32呀,这该怎么办呢?  发表于 2014-7-13 23:43
发表于 2013-12-17 23:25:18 | 显示全部楼层
wwswwswws 发表于 2013-12-17 09:37
这两个函数的参数就是这个结构,在用的时候使用者要定义一个变量,所以vOpenFile是定义的一个这个OPENFILEN ...

感谢指点,我自己又揉和了一个多选模式打开的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 07:30 , Processed in 0.182632 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表