Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼) ( No.5 ) |
- 日時: 2009/12/16 20:33
- 名前: 魔界の仮面弁士
- 【この文を削除しないで投稿して下さい】
古いスレッドに反応(既に解決済みかも知れませんけれども)。
> SendInput を.NET用に移行しようと思ったのですが、 このあたりの話ですね。 http://hanatyan.sakura.ne.jp/dotnet/mouse05.htm http://hanatyan.sakura.ne.jp/vbhlp/SendInput.htm
> CopyMemory に変わるものが見当たらず 大抵は Marshal クラスで事足りるかと思います。
ただ、SendInput に使う共用体の話であれば、メモリコピーは不要で、 <StructLayout(LayoutKind.Explicit)> _ Private Structure INPUT <FieldOffset(0)> Public type As Integer <FieldOffset(4)> Public mi As MOUSEINPUT <FieldOffset(4)> Public ki As KEYBDINPUT <FieldOffset(4)> Public hi As HARDWAREINPUT End Structure のようにオフセット位置を重ねて配置するか、あるいは、 <StructLayout(LayoutKind.Sequential, Size:=28)> _ Private Structure INPUT Public type As Integer Public ki As KEYBDINPUT End Structure のようにして、構造体をキーボード専用/マウス専用にすることで対応できます。
API の部分は、 Private Declare Function SendInput Lib "user32" _ (ByVal nInputs As Integer, _ ByVal pInputs() As INPUT, _ ByVal cbsize As Integer) As Integer に対して、 SendInput(arrayINPUT.Length, arrayINPUT, Marshal.SizeOf(GetType(INPUT))) という感じで。
> '少しは使い易いように関数化してみました。 > Private Sub sKeyEventSet(nInput As Long, _ 配列で渡す代わりに、処理をクラス化して、 Dim foo As New SendInputHelper() foo.PressKey(Keys.Home) foo.ReleaseKey(Keys.Home) foo.PressKey(Keys.ShiftKey) foo.PressKey(Keys.End) foo.ReleaseKey(Keys.End) foo.ReleaseKey(Keys.ShiftKey) foo.SendStroke() のように使えるようにすると、利用側が分かりやすくなるかも。
|
|