【问题标题】:Opening a file in its default program from VB6从 VB6 在其默认程序中打开文件
【发布时间】:2009-08-31 23:20:40
【问题描述】:

我想通过按命令在我的 VB6 应用程序上打开一个文件。该文件是另一个程序读取的文件类型。我希望它打开它并且读取文件类型的程序也应该打开,因为当它找到该文件类型时它会自动打开。谁能帮我解决这个问题,我是 VB6 的新手(昨天刚拿到)。

【问题讨论】:

    标签: file vb6


    【解决方案1】:

    我对您的要求细节有点迷茫,但一般来说,要从 VB6 中启动文件,您可以使用 ShellExecute 及其相关的 API 函数。

    我不确定最好的参考在哪里,但我想你可以开始here

    编辑:
    你很近。改变这个:

    Private Sub smb3_Click()    
        ShellExecute hWnd, "find", "C:\hi\my.file", vbNullString, vbNullString, SW_SHOWNORMAL    
    End Sub 
    

    到这里:

    Private Sub smb3_Click()    
        ShellExecute hWnd, "open", "C:\hi\my.file", vbNullString, vbNullString, SW_SHOWNORMAL    
    End Sub
    

    注意我所做的更改:
    ShellExecute 的第二个参数应该是“open”,以使用计算机上与您尝试打开的文件的扩展名相关联的程序打开指定的文件(函数的第三个参数)。检查我包含的链接。

    这导致您需要在您的机器(以及您将在其上使用程序的机器)上检查其他内容。文件扩展名 .file 应该与你想用你的程序启动的任何程序相关联。

    编辑(9 月 9 日)

    好的,让我们看看我们是否让ShellExecute 的简化实现工作。

    创建一个新的 VB6 项目(标准 EXE)并向 Form1 添加一个名为 smb1 的按钮。

    转到表单的代码视图并复制并粘贴此代码(仅此代码):

    Option Explicit
    
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    
    
    Private Sub smb3_Click()
        Debug.Print ShellExecute(hWnd, "open", "C:\hi\my.txt", vbNullString, vbNullString, 1)
    End Sub
    

    确保“c:\hi”文件夹中有一个名为 my.txt 的文本文件。

    运行程序并单击按钮。它应该使用您在机器上配置的默认文本文件编辑器程序(如记事本)打开文本文件。

    如果没有,请告诉我您遇到了什么错误以及错误发生在哪一行。另外,检查立即窗口。我相信,一旦您启动程序,立即窗口就会可见,并且只要您的程序正在运行,它就会一直可见。如果您的代码到达并运行超过ShellExecute 的行,即时窗口将显示对该函数的调用返回的代码。这将告诉我们很多关于您的问题。

    如果代码有效,我们可以考虑更改程序以处理您需要处理的文件 - “C:\hi\my.file”。

    但首先,当您在 Windows 资源管理器中双击文件时会发生什么?如果文件打开,那么我们知道您的系统中有一个程序与具有 .file 扩展名的文件相关联。如果文件未打开,您需要将程序与 .file 扩展名相关联。查看 Windows 帮助以获取更多信息。设置完成后,在您的测试程序中将 smb3 Click Event 中的代码更改为:

    Debug.Print ShellExecute(hWnd, "open", "C:\hi\my.file", vbNullString, vbNullString, 1)
    

    运行此程序并单击该程序。该文件应该打开。如果没有,请告诉我您遇到了什么错误以及在哪里,并告诉我立即窗口中有什么(如果有的话)。

    如果程序确实打开了,那么您在按钮的单击事件和ShellExecute 声明中拥有以编程方式打开文件所需的代码。但仍有一些你必须做出的改变和你应该做出的改变。

    您必须在按钮的单击事件中进行更改。我们将删除调试代码,以便您最终得到以下结果:

    ShellExecute hWnd, "open", "C:\hi\my.file", vbNullString, vbNullString, 1
    

    您应该进行的更改涉及到对ShellExecute 的调用的一些基本错误处理。 ShellExecute 在运行时返回一个代码。此代码可能表示错误。研究可以在我上面链接的页面上下载的示例程序。在其中,程序员将他的调用结果写入一个名为result 的变量。如果result 等于或小于 32,则表示错误。在示例程序中,错误显示在错误消息中,但请考虑您可能想要做什么。

    【讨论】:

    • 基本上它只是应该在我按下按钮时打开一个文件,这对我没有帮助,我收到“未定义子或功能”错误
    • 如果没有看到一些代码,我很难说出问题所在。我建议滚动到我链接的页面底部并下载示例,这确实有效。研究它(尤其是 cmdExecute_Click 事件)并将您需要的部分移到您的项目中。您不必移动太多,因此不要因示例中的行数而气馁。不要忘记示例表单顶部的声明,ShellExecute 至少需要一个声明。
    • 这是我的代码:Private Sub smb3_Click() ShellExecute hWnd, "find", "C:\hi\my.file", _ vbNullString, vbNullString, SW_SHOWNORMAL End Sub
    • 好的,我做到了,但我仍然收到错误,它突出显示“Private Sub smb3_Click()”部分
    【解决方案2】:

    使用此代码打开my.ini文件

    首先使用此代码注册dll

    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    

    然后应用以下代码:_

    Debug.Print ShellExecute(hWnd, "open", "C:\Program Files\MySQL\MySQL Server 5.0\my.ini", vbNullString, vbNullString, 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多