0

我有一个旧的 VB6 应用程序,可以打开一个 Word 文档 (.doc)。它在 Windows XP 上运行了很长时间。我的问题是,当我在 Windows 7 或 Windows 8 上安装应用程序时,代码会打开 Word,但不会显示实际文档。当它打开 Word 时,我可以导航到文件并完美打开它,因此文件没有问题。似乎我在这里遗漏了一些简单的东西,但是经过大量搜索和阅读后,我无法确定它。

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

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

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

任何帮助表示赞赏!

4

1 回答 1

0

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

如果您误导用户使用此文件夹,他们可能会删除对某些其他程序的操作至关重要的文件。

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

也没有必要屈从于使用非 COM ShellExecute 入口点,至少可以追溯到 Shell32.dll 的 5.0 版。

这应该至少从 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
于 2013-03-24T18:18:55.407 回答