2013-03-24 75 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