画面座標に対するマウスの位置を取得したい。そのために次のコードを使用しています。
window.PointToScreen(Mouse.GetPosition(window));
期待どおりに動作しています。しかし、MouseMove イベントが MainWindow の外で発生しません。これは、ウィンドウが復元された状態でマウスをデスクトップ上に移動した場合です。
どんなアイデアでも大歓迎です。
CaptureMouse() メソッドを使用します。
上記の例では、次を追加できます。
window.CaptureMouse();
MouseDown イベント ハンドラー内のコード ビハインドで。
次に、次を呼び出す必要があります。
window.ReleaseMouseCapture();
MouseUp イベント ハンドラー内のコード ビハインドで。
マウス ボタンが押されたかどうかに関係なく、WPF ウィンドウの外でマウスの位置をキャプチャできるようにする必要がありました。ウィンドウのイベントではなく、スレッドと組み合わせて WINAPI GetCursorPos を呼び出すために Interop を使用することになりました。
using System.Runtime.InteropServices;
using Point = System.Drawing.Point;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetCursorPos(ref Point lpPoint);
public MainWindow()
{
InitializeComponent();
new Thread(() =>
{
while (true)
{
//Logic
Point p = new Point();
GetCursorPos(ref p);
//Update UI
Dispatcher.BeginInvoke(new Action(() =>
{
Position.Text = p.X + ", " + p.Y;
}));
Thread.Sleep(100);
}
}).Start();
}
}
よく働く!