var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice;
var mouse = transform.Transform(GetMousePosition());
public System.Windows.Point GetMousePosition()
{
var point = Forms.Control.MousePosition;
return new Point(point.X, point.Y);
}
using System.Windows;
using System.Windows.Input;
/// <summary>
/// Gets the current mouse position on screen
/// </summary>
private Point GetMousePosition()
{
// Position of the mouse relative to the window
var position = Mouse.GetPosition(Window);
// Add the window position
return new Point(position.X + Window.Left, position.Y + Window.Top);
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT pPoint);
点是一个光struct。它只包含X,Y字段。
public MainWindow()
{
InitializeComponent();
DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
dt.Tick += new EventHandler(timer_tick);
dt.Interval = new TimeSpan(0,0,0,0, 50);
dt.Start();
}
private void timer_tick(object sender, EventArgs e)
{
POINT pnt;
GetCursorPos(out pnt);
current_x_box.Text = (pnt.X).ToString();
current_y_box.Text = (pnt.Y).ToString();
}
public struct POINT
{
public int X;
public int Y;
public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}
9条答案
按热度按时间xkftehaa1#
或者在纯WPF中使用PointToScreen。
示例辅助方法:
fjaof16o2#
去跟进瑞秋的回答。
这里有两种方法,你可以得到鼠标屏幕坐标在WPF。
1.使用Windows窗体。添加对System.Windows.Forms的引用
2.使用Win32
zqdjd7g93#
是否需要相对于屏幕或应用程序的坐标?
如果它在应用程序中,只需用途:
如果没有,我相信你可以添加对
System.Windows.Forms
的引用并用途:xqkwcwgp4#
如果你在不同的分辨率、多个显示器的电脑等上尝试了很多这些答案,你可能会发现它们并不可靠。这是因为你需要使用一个转换来获得鼠标相对于当前屏幕的位置,而不是由所有显示器组成的整个查看区域。类似这样的东西...(其中“this”是一个WPF窗口)。
jv4diomz5#
这无需使用表单或导入任何DLL即可工作:
ffdz8vbo6#
您可以使用TimerDispatcher(WPF定时器模拟)和Windows“挂钩”的组合来捕获操作系统中的光标位置。
点是一个光
struct
。它只包含X,Y字段。这个解决方案也解决了太频繁或太不频繁阅读参数的问题,所以你可以自己调整它。但是记住WPF方法重载一个参数,它表示
ticks
而不是milliseconds
。tnkciper7#
如果你正在寻找一个1班轮,这是很好的。
+ mWindow.Left
和+ mWindow.Top
确保位置在正确的位置,即使用户拖动窗口。wtlkbnrh8#
Mouse.GetPosition(mWindow)
提供鼠标相对于所选参数的位置。mWindow.PointToScreen()
将位置转换为相对于屏幕的点。所以
mWindow.PointToScreen(Mouse.GetPosition(mWindow))
给你鼠标相对于屏幕的位置,假设mWindow
是一个窗口(实际上,任何从System.Windows.Media.Visual
派生的类都有这个函数),如果你在WPF窗口类中使用这个函数,this
应该可以工作。mbskvtky9#
我想用这个密码