tagCANDY CGI VBレスキュー(花ちゃん)の雑談用掲示板
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の雑談用掲示板
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()
のように使えるようにすると、利用側が分かりやすくなるかも。



 [スレッド一覧へ] [親スレッドへ]