for WPF developers
WPF ではマウスポインタの位置をコードから変更する方法がありません。 したがって、Win32 API を利用する必要があります。
Win32 API を利用するためには User32.dll をインポートする必要があります。
その上で、マウスポインタの位置を設定するには SetCursorPos() メソッドを使用するため、
次のようなコードになります。
namespace WpfApplication1
{
using System.Runtime.InteropServices;
/// <summary>
/// Win32 API を使用したメソッドをまとめたクラス
/// </summary>
public class User32
{
/// <summary>
/// マウス関連のメソッドをまとめたクラス
/// </summary>
public class Mouse
{
[DllImport("User32.dll")]
private static extern bool SetCursorPos(int X, int Y);
/// <summary>
/// マウスカーソルの位置を設定します。
/// </summary>
/// <param name="a">X 座標を指定します。</param>
/// <param name="b">Y 座標を指定します。</param>
public static void SetPosition(int a, int b)
{
SetCursorPos(a, b);
}
}
}
}
上記のコードを実際に使ってみましょう。
今回はテストのため View 側のコードビハインドに記述してみます。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
MouseLeftButtonDown="Window_MouseLeftButtonDown">
<Grid>
<TextBlock Text="Click this window." />
</Grid>
</Window>
namespace WpfApplication1
{
using System.Windows;
using System.Windows.Input;
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
User32.Mouse.SetPosition(0, 0);
}
}
}
SetCursorPos() 関数には画面に対する絶対座標を指定するため、
ウィンドウの左上に移動したい場合はまずウィンドウ自体の画面座標を取得する必要があります。
例えば下記のようなコードにすることでウィンドウ左上座標に移動するようになります。
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 自分の原点を画面からみた座標に変換する
var pt = this.PointToScreen(new Point(0, 0));
User32.Mouse.SetPosition((int)pt.X, (int)pt.Y);
}
Designed by CSS.Design Sample