
http://support.microsoft.com/kb/170918/ja
等を参考に、コンソールアプリからHTMLファイルを呼び出すだけのEXEをVB(Visual Basic 2008 Express Edition)で作ったところ、
Shell関数ではHTMLがIEで起動されるのに対し、ShellExecute関数ではダメでした。
HTMLへのファイルパスが正しいことはMsgBoxで確認しました。
また、ほぼ同じソースをbasにしてExcelから起動すると、ShellExecuteでも起動しました。
以下がソース(抜粋)になりますが、原因が分かる方がおられましたら、ヒントだけでも、ご教示いただけると幸いです。
よろしくお願いいたします。
- - - - - - - - - - - - - - - - - - - - - -
Option Explicit On
Module Module1
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _
String, ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
'エラーコード宣言略
Function StartDoc(ByVal DocName As String) As Long
Dim Scr_hDC As Long
Scr_hDC = GetDesktopWindow()
'こちらだと成功 StartDoc = Shell("explorer.exe" & " " & DocName, vbNormalFocus)
StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _
"", "C:\", SW_SHOWNORMAL)
End Function
Sub Main()
Dim r As Long, msg As String
r = StartDoc(CurDir() & "\target.html")
'エラーハンドリング省略
End Sub
End Module
No.2ベストアンサー
- 回答日時:
Declare宣言の WinAPIで使っている Long型引数が問題なのです
VB6のころは 32bit長の整数はLong型でしたが
VB.NET系は Integerが32bit長の整数になります
これの違いで スタックに積んだデータがShellExecuteへうまく渡らないため実行されないのだろうと思います
ご指摘を参考に、以下の修正を行なったところ、期待通り実行されました。ありがとうございました。
<変更前>
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _
String, ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
<変更後>
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Integer, ByVal lpszOp As _
String, ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Integer) As Integer
No.1
- 回答日時:
VBAやVBScriptは多少業務で触ったことがあるのですが、VBは初心者&初日なもので、ExpressEditionはVB6なのかなと思っておりました。
初歩的な質問に対してのコメント、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
*.asp の拡張子名がついたht...
-
Access VBAよりシート名を取得...
-
jspのエラーが修正できません。
-
EXCELアドイン自動起動マクロ
-
別のAccessファイルのフォーム...
-
vbsかバッチファイルでmp3を再...
-
VBA Application visibleの...
-
GUIアプリをコマンドラインで使...
-
Eclipseで、プロジェクト名のと...
-
正しいURL指定しているにもかか...
-
JSPのクラスをコンパイルできな...
-
「ワークスペースをビルド中」...
-
Eclipse・プロジェクトで、フォ...
-
エクリプスで実行時、最新クラ...
-
eclipseで1ファイルの警告を100...
-
SVFの設定について:クラスパス...
-
タグが閉じてないというエラー...
-
classファイルについて
-
tomcat起動時エラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
system.mdwを見つけることが出...
-
jspのエラーが修正できません。
-
*.asp の拡張子名がついたht...
-
Access VBAよりシート名を取得...
-
GUIアプリをコマンドラインで使...
-
EXE間で同期をとりながらデータ...
-
VBAで作成したマクロをデスクト...
-
VBA Application visibleの...
-
exeファイルが実行中かどうか、...
-
EXCELバッチコマンド起動...
-
別のAccessファイルのフォーム...
-
HTMLでサーバーに・・・
-
PC 遅いと感じています。
-
量子化学計算ソフト GAMESS の...
-
内部プログラムエラーになりました
-
サーブレット
-
VB2008によるOCX作成、またはHT...
-
VB5が起動しない
-
エラー この変数は宣言されて...
おすすめ情報