在Windows7/8版本中从VB6打开Word文档

在Windows7/8版本中从VB6打开Word文档,vb6,shellexecute,Vb6,Shellexecute,我有一个旧的VB6应用程序,可以打开Word文档(.doc)。很长一段时间以来,它在Windows XP上运行得非常好。我的问题是,当我在Windows7或Windows8上安装应用程序时,代码将打开Word,但不会显示实际文档。当它打开Word时,我能够导航到该文件并将其完全打开,所以该文件没有问题。似乎我在这里遗漏了一些简单的东西,但经过大量的搜索和阅读,我无法准确指出 我已经确定Word是与Windows 7和Windows 8计算机上的.doc文件关联的程序,所以不是这样 以下是我用来打

我有一个旧的VB6应用程序,可以打开Word文档(.doc)。很长一段时间以来,它在Windows XP上运行得非常好。我的问题是,当我在Windows7或Windows8上安装应用程序时,代码将打开Word,但不会显示实际文档。当它打开Word时,我能够导航到该文件并将其完全打开,所以该文件没有问题。似乎我在这里遗漏了一些简单的东西,但经过大量的搜索和阅读,我无法准确指出

我已经确定Word是与Windows 7和Windows 8计算机上的.doc文件关联的程序,所以不是这样

以下是我用来打开文档的代码:

Dim iret As Long
iret = ShellExecute(hwnd, vbNullString, QuoteFilePath & File1.FileName,  vbNullString, "c:\", SW_SHOWNORMAL)

感谢您的帮助

这个特殊文件夹不应该实际用于存储用户文档的原因有很多。微软甚至第三方已经开始将其用于完全不同的目的。根据安装的应用程序,您甚至可以在此处找到DLL

如果错误训练用户使用此文件夹,他们可能会删除对其他程序的操作至关重要的文件

但是,如果您坚持这样做,请注意,使用文字字符串值引用文件夹是不安全的,因为它可能会根据用户的语言设置显示在不同的别名下。它甚至可能通过行政行动转移到其他地方

多年来,至少在Shell32.dll的5.0版之前,还没有必要弯腰使用非COM ShellExecute入口点

至少从WinXP开始,这应该可以工作:

Option Explicit

Private Const ssfCOMMONDOCUMENTS As Long = &H2E
Private Enum SHOW_WINDOW
    SW_HIDE = 0
    SW_SHOWNORMAL = 1
    SW_SHOWMINIMIZED = 2
    SW_SHOWMAXIMIZED = 3
    SW_SHOWNOACTIVATE = 4
    SW_SHOW = 5
    SW_SHOWMINNOACTIVE = 7
    SW_SHOWDEFAULT = 10
End Enum

Private Shell As Object
Private Path As String

Private Sub File1_Click()
    On Error Resume Next
    'Works on XP through Vista, fails on Win7:
    'Shell.ShellExecute File1.FileName, , Path, "open", SW_SHOWNORMAL

    'Works on XP through Win7:
    Shell.ShellExecute Path & "\" & File1.FileName, , , "open", SW_SHOWNORMAL
    If Err Then
        MsgBox "Error " & CStr(Err.Number) & " " & Err.Description
    End If
End Sub

Private Sub Form_Load()
    Set Shell = CreateObject("Shell.Application")
    With Shell.NameSpace(ssfCOMMONDOCUMENTS).Self
        Path = .Path
    End With
    With File1
        .Pattern = "*.doc"
        .Path = Path
    End With
End Sub

适用于我(Windows 7上的VB6),但请尝试将
“open”
作为第二个参数传递。
QuoteFilePath
位于何处?调用此函数时,完整的
QuoteFilePath&File1.FileName
是什么?这可能是文件名或位置的问题,也可能是Win7/8上存在XP上不存在的用户权限问题。这也可能是因为您正在将工作目录设置为“C:”,Vista及以上版本的标准(非管理员)用户无法写入该目录。quoteFILEpath是Windows 8计算机上的文件夹“users\public\public documents”。该文件位于名为“data”的子文件夹中,文件名是一系列数字,后跟.doc(例如:34332.doc)。如果我不应该将工作目录设置为C:,我应该将其设置为什么?@GSerg..将其设置为“打开”没有任何区别。谢谢你的想法。我说得太快了。此代码适用于XP和Vista,但在Win7上失败:“Windows找不到'dummy.doc'。请确保键入的名称正确…”。这里似乎有别的东西在起作用。好吧,找到了一种即使在Win7上也能工作的方法,尽管我不喜欢它。很难说是什么改变了,也许与Windows 7中添加到Shell中的doofy“Libraries”概念有关?我使用公共文档,因为我需要一个机器上所有用户都可以读/写文档和mdb文件的地方。如果我放入我的文档,并不是所有用户都能看到。如果我输入appdata,它是隐藏的。我认为公共文档正是……一个放置您希望所有用户都能看到/访问的文档和文件的地方。这东西快把我逼疯了!我应该将用户创建的文档/可写mdb放在哪里?您在Windows 7中的工作方式是什么?我已经编辑了上面的示例,使其在Windows 7中工作。寻找评论。除了在一些非启动分区上创建文件夹外,我没有其他关于共享公共文档文件夹的建议。人们在公共文档中安装DLL的事实是非常不幸的。你可以试着告诉你的用户要小心。但总的来说,您不希望用户看到MDB文件,所以CommonAppdata更有意义。谢谢您的帮助,我非常感谢。我有一个mdb文件和用户生成的word引号的组合。他们希望能够编辑/附加报价到电子邮件中,并且一台机器可能有一个以上的用户要访问这些报价,所以MyDocuments被淘汰了。他们不会在CommonAppData中看到它们,所以我想把它们放在CommonDocument文件夹中。我将试用您打开Word文档的代码,看看它是否能改进Win7/8上的内容。