0

Word ドキュメント (.doc) を開く古い VB6 アプリがあります。長い間、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

この特別なフォルダを実際にユーザー ドキュメントの保存に使用してはならない理由はいくつかあります。マイクロソフトやサード パーティでさえ、まったく異なる目的で使用し始めています。インストールされているアプリケーションによっては、ここに 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
于 2013-03-24T18:18:55.407 に答える