DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SendInputがうまくいかない

環境/言語:[vb.net 2005 windowsXP]
分類:[.NET]

XPSP3/VB2005です

キー打鍵で他のプログラムをクリックしようとしているのですが

<DllImport("user32.dll", CharSet:=CharSet.Auto)> Private Shared Function SendInput(ByVal nInputs As Integer, ByVal pInput As INPUT, ByVal cbsize As Integer) As Integer
End Function

<StructLayout(LayoutKind.Sequential, Size:=28)> _
Private Structure INPUT
    Public _type As Integer
    Public _mi As MOUSEINPUT
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Private Structure MOUSEINPUT
    Public dx As Integer
    Public dy As Integer
    Public mouseData As Integer
    Public dwFlags As Integer
    Public time As Integer
    Public dwExtraInfo As IntPtr
End Structure

Dim Inp as INPUT

Windows.Forms.Cursor.Position = New Point(X, Y)

Inp._type = 0
Inp._mi.dx = 0
Inp._mi.dy = 0
Inp._mi.mouseData = 0
Inp._mi.dwFlags = MOUSEEVENTF_LEFTDOWN
Inp._mi.time = 0
Inp._mi.dwExtraInfo = IntPtr.Zero

Dim Rslt As Integer = SendInput(1, Inp, Marshal.SizeOf(Inp))

Inp._type = 0
Inp._mi.dx = 0
Inp._mi.dy = 0
Inp._mi.mouseData = 0
Inp._mi.dwFlags = MOUSEEVENTF_LEFTUP
Inp._mi.time = 0
Inp._mi.dwExtraInfo = IntPtr.Zero

Rslt = SendInput(1, Inp, Marshal.SizeOf(Inp))

でクリックされずRsltが0になります
カーソルは移動しています
何が原因なのでしょうか
よろしくお願いいたします
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310.aspx
GetLastErrorで詳細を確認しろ、とある関数については、
DllImport属性のSetLastErrorをTrueに設定しておけば、
失敗時にnew Win32Exception()とすることで
エラー情報を比較的簡単に取得できます。

さて、SendInputの第2引数は「An array of INPUT structures」なので、
直接ByValなINPUT単体を渡してはいけません。
配列で渡してやるのが一番楽でしょう。
<DllImport... SendInput(..., ByVal pInputs As INPUT(), ...
渡すのが必ず一つのINPUTだけならByRefでも構いません。
<DllImport... SendInput(..., ByRef pInputs As INPUT, ...
Hongliang様、回答ありがとうございます

> さて、SendInputの第2引数は「An array of INPUT structures」なので、
> 直接ByValなINPUT単体を渡してはいけません。
> 配列で渡してやるのが一番楽でしょう。
> <DllImport... SendInput(..., ByVal pInputs As INPUT(), ...
> 渡すのが必ず一つのINPUTだけならByRefでも構いません。
> <DllImport... SendInput(..., ByRef pInputs As INPUT, ...

そういえばサンプルは配列でした(^^;
ByRefで出来ました
ありがとうございました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板