【发布时间】:2009-08-31 23:20:40
【问题描述】:
我想通过按命令在我的 VB6 应用程序上打开一个文件。该文件是另一个程序读取的文件类型。我希望它打开它并且读取文件类型的程序也应该打开,因为当它找到该文件类型时它会自动打开。谁能帮我解决这个问题,我是 VB6 的新手(昨天刚拿到)。
【问题讨论】:
我想通过按命令在我的 VB6 应用程序上打开一个文件。该文件是另一个程序读取的文件类型。我希望它打开它并且读取文件类型的程序也应该打开,因为当它找到该文件类型时它会自动打开。谁能帮我解决这个问题,我是 VB6 的新手(昨天刚拿到)。
【问题讨论】:
我对您的要求细节有点迷茫,但一般来说,要从 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,则表示错误。在示例程序中,错误显示在错误消息中,但请考虑您可能想要做什么。
【讨论】:
使用此代码打开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)
【讨论】: