| ■No92415 (犬夜叉 さん) に返信 >> RawInput を捉えるとか。 > RawInput ってなんですか?
DirectX の機能で、入力デバイスから得られる情報を直接受け取るものです。 自アプリがアクティブではない状態で、キーボードやマウス等の入力を受け取る場合にも使えます。
> どうやって使うのでしょうか? メニューに [ツール]-[NuGet パッケージ マネージャー] がありませんか?
もしあれば、[ソリューションの NuGet パッケージの管理] ダイアログで [参照] タブで「SharpDX.RawInput」と検索して、自プロジェクトにインストールすれば 参照設定が行われます。
もしくは、パッケージ マネージャ コンソールにて Install-Package SharpDX.RawInput のコマンドを入力する方法でも OK です。
https://www.nuget.org/packages/SharpDX.RawInput/
たとえばこんな感じ。
using SharpDX.RawInput; using SharpDX.Multimedia; public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { // 自フォーム外のマウス操作も捉える Device.RegisterDevice(UsagePage.Generic, UsageId.GenericMouse, DeviceFlags.InputSink, Handle); Device.MouseInput += Device_MouseInput; }
private void Device_MouseInput(object sender, MouseInputEventArgs e) { // こちらはカーソルの絶対座標 label1.Text = Cursor.Position.ToString();
// こちらはマウスの相対的な動作 // (1px 未満の微細な動きも捉えられるが、絶対座標は得られない) var sb = new StringBuilder(); sb.AppendFormat("OffsetXY=({0}, {1})", e.X, e.Y); if(e.WheelDelta !=0) { sb.AppendFormat(", Wheel={0}", e.WheelDelta); } if (e.ButtonFlags != MouseButtonFlags.None) { sb.AppendFormat(", Button={0}", e.ButtonFlags); } listBox1.Items.Insert(0, sb.ToString());
// 左ボタンが押された時に、フォーム外の座標だったらフォームを閉じる if (e.ButtonFlags == MouseButtonFlags.LeftButtonDown) { if(!IsDisposed && !GetWindowContainState(this)) { Close(); } } } } |