2013-03-24 60 views
0

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

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

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

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

任何帮助表示赞赏!

+0

工作对我来说(在Windows 7 VB6),但尝试通过' “打开”'作为第二个参数。 – GSerg 2013-03-24 16:36:05

+0

'QuoteFilePath'位于何处?调用它时,完整的'QuoteFilePath&File1.FileName'是什么?这可能是文件名或位置的问题,也可能是Win7/8上的用户权限问题,而这些问题在XP上不存在。这也可能是因为您将工作目录设置为'C:\',这是Vista和以上版本的标准(非管理员)用户无法写入的。 – 2013-03-24 16:41:14

+0

quoteFILEpath是Windows 8机器上的“users \ public \ public文档”文件夹。该文件位于名为“data”的子文件夹中,文件名是一系列数字,后跟.doc(例如:3434332.doc)。如果我不应该将工作目录设置为C :,我应该将其设置为? – 2013-03-24 16:53:31

回答

0

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

如果你不想让用户玩这个文件夹,他们可能会删除一个对其他程序的操作至关重要的文件。

但是,如果您坚持这样做,请注意通过字符串值引用文件夹是不安全的,因为它可以根据用户的语言设置显示在不同的别名下。它甚至可能通过行政行为被重新安置在别处。

它也没有必要屈服于使用年龄的非COM ShellExecute入口点,至少早在版本5.0的Shell32.dll。

这至少应该从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 
+0

我说得太快了。此代码适用于XP和Vista,但在Win7上失败:“Windows无法找到'dummy.doc',请确保您输入的名称正确...”。其他东西似乎在这里工作。 – Bob77 2013-03-24 18:28:16

+1

好吧,找到一种即使在Win7上也可以工作的方式,尽管我不喜欢它。很难说是什么改变了,或许是与在Windows 7中添加到Shell中的doofy“Libraries”概念相关的东西? – Bob77 2013-03-24 18:39:56

+0

我正在使用公共文档,因为我需要一个机器上的所有用户都可以读/写文档和mdb文件的地方。如果我输入mydocuments,并非所有用户都可以看到。如果我放入appdata,它是隐藏的。我虽然公开文档就是这样一个放置文档和文件的地方,您希望所有用户都能看到/访问文档和文件。这东西让我疯狂!我应该在哪里放置用户创建的文档/可写mdb,以及您在Windows 7中的工作方式? – 2013-03-24 19:26:52