プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

Declare宣言の WinAPIで使っている Long型引数が問題なのです


VB6のころは 32bit長の整数はLong型でしたが
VB.NET系は Integerが32bit長の整数になります

これの違いで スタックに積んだデータがShellExecuteへうまく渡らないため実行されないのだろうと思います
    • good
    • 0
この回答へのお礼

ご指摘を参考に、以下の修正を行なったところ、期待通り実行されました。ありがとうございました。

<変更前>
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

お礼日時:2008/05/11 18:03

VB6以前とVB.NET以降は全く別言語と思うべきです。



参考URL:http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6to …
    • good
    • 0
この回答へのお礼

VBAやVBScriptは多少業務で触ったことがあるのですが、VBは初心者&初日なもので、ExpressEditionはVB6なのかなと思っておりました。
初歩的な質問に対してのコメント、ありがとうございました。

お礼日時:2008/05/11 18:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!