投稿者 KOZ  (社会人) 投稿日時 2019/12/24 16:37:50
ハンドルは 64bit の OS では 64bit になりますので、System.IntPtr で宣言してください。

API の宣言は pinvoke.net で調べると良いです。

ShellExecute の書き方はこちら
https://www.pinvoke.net/default.aspx/shell32/ShellExecute.html

Declare を使って宣言した場合、文字列を MarshalAs で修飾しないと
日本語文字列を与えたとき、文字列が破壊されるので新しい記法を
使ったほうがいいと思います。

Declare Function MsgBox Lib "user32.dll" Alias "MessageBoxA" _
                (ByVal hWnd As IntPtr, ByVal txt As String,
                 ByVal caption As String, ByVal Typ As Integer) As Integer
Sub Main()
    Dim text As String = "字ABC"
    MsgBox(IntPtr.Zero, text, vbNullString, 0) ' "字ABC" と表示される
    MsgBox(IntPtr.Zero, text, vbNullString, 0) ' "字AB" と表示される
End Sub

Declare を使って文字を破壊しないようにするには

Imports System.Runtime.InteropServices

Declare Function MsgBox Lib "user32.dll" Alias "MessageBoxA" _
            (ByVal hWnd As IntPtr,
             <MarshalAs(UnmanagedType.LPStr)> ByVal txt As String,
             <MarshalAs(UnmanagedType.LPStr)> ByVal caption As String,
             ByVal Typ As Integer) As Integer

このように書きます。