• ベストアンサー

VB.netでShellExecuteがしたい

VB6ですと ShellExecute(Me.Handle, "open", "History.csv", "", "", 3) とするとエクセルが開いて「History.csv」が観覧できるのですが、VB.netだと、エラーがでないもののエクセル画面がでてきません。なぜでしょうか? また、ShellExecuteに変わるような関数がありますでしょうか? 以下はソースです、パスは間違っていないし、返り値は562954248388610となっています。 i = ShellExecute(Me.Handle.ToInt64, "open", sFolderPullPath & "SerialHistory.csv", "", "", 3)

質問者が選んだベストアンサー

  • ベストアンサー
  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.4

こんにちは、じゃんぬねっと です。 ついでなんで以下についてもお答えします。 # まあ、余談に近いのですが... > 以下はソースです、パスは間違っていないし、返り値は562954248388610となっています。 > i = ShellExecute(Me.Handle.ToInt64, "open", sFolderPullPath & "SerialHistory.csv", "", "", 3) これは、Declare の宣言が間違ってるんじゃないでしょうか? VB6 での Long は、VB.NET では Integer (Int32) です。 戻り値が Long (Int64) になっているのならば、未定義の上位ビットが返ってきちゃいます。 # 第 1 引数を見る限り、そう確信しています。 それと、第 1 引数は IntPtr でやるべきですね。

lord_chan
質問者

補足

ありがとうございます。Declare の宣言をLongからInt32に直すとできました。 ちなみに「ByVal lpKeyName As Any」などのAny型は何に直せばいいのでしょうか?GetPrivateProFileStringに使われているものです。

その他の回答 (5)

回答No.6

GetPrivateProfileStringについても、変わらないと思うのですが^^; 値/参照のIN/OUT考えたら、全部STRINGに置き換える事ができますよー ついでだから、書きもあわせてサンプルをどうぞ^^ Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _ (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _ (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer Const DEF_SEC As String = "SECTION" Const DEF_KEY As String = "KEY" Const DEF_INI As String = "C:\test.ini" Const DEF_BUFF_LEN As Integer = &HFF& Dim intRet As Integer Dim strValue As String = "値" '書く MsgBox("書き込む値: " & strValue) Call WritePrivateProfileString(DEF_SEC, DEF_KEY, strValue, DEF_INI) '初期化 strValue = New String(CChar(" "), DEF_BUFF_LEN) MsgBox("初期化された値: " & strValue) '読む If GetPrivateProfileString(DEF_SEC, DEF_KEY, vbNullString, strValue, DEF_BUFF_LEN, DEF_INI) Then   MsgBox("取得した値: " & Strings.Left(strValue, (InStr(strValue, vbNullChar) - 1))) Else   MsgBox("失敗") End If

lord_chan
質問者

補足

ありがとうございます、試してみます。

回答No.5

Anyは、場合によってStringかIntegerです。 もし、関連づいたアプリケーションでファイルを開くのであれば、Stringが使いやすいかと・・・・ Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Integer, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer Dim intRet As Integer intRet = ShellExecute(0, "open", Environ("windir") & "\珈琲カップ.bmp", vbNullString, Environ("windir"), 1)

lord_chan
質問者

補足

なるほどですね、ありがとうございます。GetPrivateProFileStringのdeclareはどのような記述になるのでしょう?

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.3

こんにちは、 VB.NET ですと、API を使わずとも、 System.Diagnostics.Process.Start() メソッドで可能です。

lord_chan
質問者

補足

ありがとうございます。今後とも活用させていただきます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Shell関数を使うというのはどうでしょうか

lord_chan
質問者

補足

ご回答ありがとうございます。具体的にはshell関数でエクセルを起動させるのでしょうか?

  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.1

Imports System.Diagnostics Process.Start("c:\History.csv") ではどうでしょうか?

lord_chan
質問者

補足

ご回答ありがとうございます。 なるほどですね、.netには新しい関数があるのですね。

関連するQ&A