■81354 / inTopicNo.2) |
Re[1]: フォームの外のマウスクリックについて |
□投稿者/ 魔界の仮面弁士 (896回)-(2016/09/10(Sat) 13:05:47)
|
■No81351 (msi004 さん) に返信 > 最終的な動作としてはbandicamのウィンドウ選択機能のようにしたいと考えております。 使った事が無いので、どういう機能か分かりません…。
> どのようにすれば外部アプリケーションのウィンドウをクリックしたことを捕捉できるのか教えてください。 とりあえず、RawInput を使ったサンプルを書いてみました。 https://msdn.microsoft.com/en-us/library/ms645536.aspx
SlimDx を nuget しておいてください。 https://www.nuget.org/packages/SlimDX/
Imports SlimDX.RawInput Imports SlimDX.Multimedia Public Class Form1 Private listView1 As New ListView() With {.Dock = DockStyle.Fill} Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '今回の処理の主要部分 Device.RegisterDevice(UsagePage.Generic, UsageId.Mouse, DeviceFlags.InputSink, Handle) AddHandler Device.MouseInput, AddressOf OnMouseInput
'以下は 結果表示用の ListView なので、デザイン時に生成しておいても OK listView1 = New ListView() With {.Dock = DockStyle.Fill} listView1.Font = New Font("MS UI Gothic", 9.0!) listView1.Columns.Add("日時").Width = 140 listView1.Columns.Add("押下中").Width = 90 listView1.Columns.Add("X").Width = 45 listView1.Columns.Add("Y").Width = 45 listView1.Columns.Add("操作").Width = 70 listView1.Columns.Add("X移動").Width = 50 listView1.Columns.Add("Y移動").Width = 50 listView1.Columns.Add("ホイール").Width = 65 listView1.Columns.Add("ExtraInfo").Width = 0 listView1.Columns.Add("Mode").Width = 0 listView1.Columns.Add("RawButtons").Width = 0 listView1.View = View.Details Controls.Add(listView1) End Sub Private ci = System.Globalization.CultureInfo.InvariantCulture Private Sub OnMouseInput(sender As Object, e As MouseInputEventArgs) 'マウス通知を画面に表示 Dim pos = Cursor.Position With listView1.Items.Insert(0, Now.ToString("yyyy/MM/dd HH:mm:ss.fff", ci)).SubItems .Add(MouseButtons.ToString("G")) .Add(pos.X.ToString()) .Add(pos.Y.ToString()) .Add(e.ButtonFlags.ToString("G")) .Add(e.X.ToString()) .Add(e.Y.ToString()) .Add(e.WheelDelta.ToString()) .Add(e.ExtraInformation.ToString()) .Add(e.Mode.ToString("G")) .Add(e.RawButtons.ToString()) End With End Sub End Class
上記以外の手法としては、外部マウス操作を DirectInput で捕らえるとか、 Form の Me.MouseButtons と Me.MousePosition を Timer で監視するとか…。
|
|