C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: フォームの外のマウスクリックについて


(過去ログ 138 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■81351 / inTopicNo.1)  フォームの外のマウスクリックについて
  
□投稿者/ msi004 (1回)-(2016/09/10(Sat) 09:50:39)

分類:[VB.NET/VB2005 以降] 

VB.NET
visual studio 2013

質問させていただきます。
外部のアプリケーションのウィンドウをクリックした際に、そのウィンドウをキャプチャするプログラムを作成しております。
しかし、調べた結果見つけたMe.CaptureとWndProcを使う方法では、なぜかマウスクリックを取得することはできませんでした。(&H202とm.Msgを比較しました)
どのようにすれば外部アプリケーションのウィンドウをクリックしたことを捕捉できるのか教えてください。
最終的な動作としてはbandicamのウィンドウ選択機能のようにしたいと考えております。
引用返信 編集キー/
■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 で監視するとか…。
引用返信 編集キー/
■81368 / inTopicNo.3)  Re[2]: フォームの外のマウスクリックについて
□投稿者/ msi004 (2回)-(2016/09/11(Sun) 23:45:03)
No81354 (魔界の仮面弁士 さん) に返信
> ■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 で監視するとか…。



回答ありがとうございます。無事に期待した動作をできそうです!
引用返信 編集キー/
■81369 / inTopicNo.4)  Re[3]: フォームの外のマウスクリックについて
□投稿者/ msi004 (3回)-(2016/09/11(Sun) 23:46:25)
解決済みにし忘れました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -