ローカルのHTMLファイルを起動するには?

解決


xyz  2004-03-25 23:48:13  No: 112521  IP: [192.*.*.*]

色々と過去ログやら見ているのですが方法が分からず書き込みしました。

現在、ローカルでHTMLファイルを作成しています。(画像を表示させてます)
そのHTMLファイルをボタンをクリックすることで立ち上げたいのですが
Shellではファイルが見つかりませんとエラーが返ってきてしまいます。

どなたか方法を教えていただけると助かります。

宜しくお願い致します。

WindowsXP SP1,VB.Net,Windows.Formsです。

編集    削除
36NET  2004-03-26 02:03:21  No: 112522  IP: [192.*.*.*]

VB6の関連付けられたアプリでオープンする方法の
サンプルモジュールですがこれでは駄目ですか?


Option Explicit

'= 関連付けられている実行可能ファイルによりファイルを
'= オープンまたは印刷する拡張関数の宣言
Declare Function ShellExecuteEx Lib "shell32.dll" _
    Alias "ShellExecuteExA" _
   (lpExecInfo As SHELLEXECUTEINFO) As Long

'= 指定されたプロセスの終了状態を取得する関数の宣言
Declare Function GetExitCodeProcess Lib "kernel32.dll" _
   (ByVal hProcess As Long, _
    lpExitCode As Long) As Long

'= オブジェクトの状態がシグナル状態あるいは
'= タイムアウト時間が経過するまで待機する関数の宣言
Declare Function WaitForInputIdle Lib "user32.dll" _
   (ByVal hProcess As Long, _
    ByVal dwMilliseconds As Long) As Long

'= 待機
Public Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long)


'= オブジェクトハンドルをクローズする関数の宣言
Declare Function CloseHandle Lib "kernel32.dll" _
    (ByVal hObject As Long) As Long

'= 実行するアプリケーションの情報を定義する構造体の宣言
Type SHELLEXECUTEINFO
    cbSize        As Long
    fMask         As Long
    hWnd          As Long
    lpVerb        As String
    lpFile        As String
    lpParameters  As String
    lpDirectory   As String
    nShow         As Long
    hInstApp      As Long
    lpIDList      As Long
    lpClass       As String
    hkeyClass     As Long
    dwHotKey      As Long
    hIcon         As Long
    hProcess      As Long
End Type

'= プロセスハンドルの取得を示すマスク定数
Public Const SEE_MASK_NOCLOSEPROCESS = &H40

'= ウィンドウの表示状態を示す定数の宣言
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3

'= プロセスの終了状態を示す定数
Public Const STATUS_PENDING = &H103&
Public Const STILL_ACTIVE = STATUS_PENDING

Public Function OpenFile(strFileName As String) As Boolean

    Dim udtShellExecuteInfo As SHELLEXECUTEINFO
    Dim lngProcessExitCode  As Long
    Dim lngResult           As Long
    Dim lngInstr            As Long
    Dim lngFor              As Long

    OpenFile = False

    ' 実行するファイルの情報を指定
    With udtShellExecuteInfo
        .cbSize = Len(udtShellExecuteInfo)
        .fMask = SEE_MASK_NOCLOSEPROCESS
        .hWnd = App.ThreadID
        .lpVerb = "open"
        .lpFile = strFileName
        .lpParameters = vbNullChar
        .lpDirectory = vbNullChar
        .nShow = SW_SHOWNORMAL
    End With
    
    '= 関連付けられている実行可能ファイルにより印刷
    If ShellExecuteEx(udtShellExecuteInfo) <> 1 Then
        Exit Function
    End If
    
    '= 新しいプロセスを作成できたときは
    If udtShellExecuteInfo.hProcess = 0 Then
        '= エラーはシステム上で出力
        Exit Function
    End If
    
    '= 初期化待機
    If WaitForInputIdle(udtShellExecuteInfo.hProcess, 600000) <> 0 Then
        Call CloseHandle(udtShellExecuteInfo.hProcess)
        Exit Function
    End If
        
    Call CloseHandle(udtShellExecuteInfo.hProcess)
    
    OpenFile = True

End Function

編集    削除
36NET  2004-03-26 02:08:02  No: 112523  IP: [192.*.*.*]

あっ…元々印刷処理用の関数だったので…
一部コメントがおかしいところがありますが気にしないで下さい…

編集    削除
xyz  2004-03-26 02:42:12  No: 112524  IP: [192.*.*.*]

36NETさん。
さっそくのレス。ありがとうございます。

ちょっとまだ分からないところがあるので調べてみますが、
これではダメなような・・・できてももっと簡単な方法があるのでは?
なんて思ってます。
ちなみに今は一時的な逃げの手段としてbatchファイルを作成して、
それをキックして逃げてます。
ただ出来るだけBatchファイルとか使いたくないのでVB内で
解決できればと思っています。
Internet Explorerを起動して、そのHTMLファイルを引数で渡せたりとか。。。
なんか上手いやり方ないですかね?

編集    削除
36NET  2004-03-26 18:22:11  No: 112525  IP: [192.*.*.*]

つまりこんな感じでしょうか?

Shell "C:\省略\IEXPLORE.EXE C:\tmp\test.html"

編集    削除
xyz  2004-04-03 01:21:50  No: 112526  IP: [192.*.*.*]

36NETさん。お返事遅くなりました。
無事に解決できました。
IEXPLORE.EXEとHTMLファイルのパスの間に
カンマで区切りを入れていたためにエラーになっていたみたいです。
有難う御座いました。

編集    削除