如何在屏幕上获得当前的鼠标协调? 我知道只有Mouse.GetPosition()
它得到mousePosition的元素,但我想得到协调而不使用元素。如何获取WPF中的当前鼠标屏幕坐标?
回答
要在雷切尔的回答跟进。
这里有两种方法可以在WPF中获得鼠标屏幕坐标。
1.使用Windows窗体。一提到System.Windows.Forms的
添加public static Point GetMousePositionWindowsForms()
{
System.Drawing.Point point = Control.MousePosition;
return new Point(point.X, point.Y);
}
2.使用Win32的
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GetCursorPos(ref Win32Point pt);
[StructLayout(LayoutKind.Sequential)]
internal struct Win32Point
{
public Int32 X;
public Int32 Y;
};
public static Point GetMousePosition()
{
Win32Point w32Mouse = new Win32Point();
GetCursorPos(ref w32Mouse);
return new Point(w32Mouse.X, w32Mouse.Y);
}
虽然正确,但如果您采用原始的X和Y坐标并使用它们设置窗口的位置,但如果您的DPI设置不是100% (96DPI)。 该问题的最后一个答案是否正确! – user195275 2017-08-21 21:15:17
你的评论是完全正确的,这不应该被标记为这个问题的正确答案! – Arash 2017-09-29 21:10:38
你想要相对于屏幕或应用程序的坐标吗?
如果它是在应用程序中只需使用:
Mouse.GetPosition(Application.Current.MainWindow);
如果不是这样,我相信你可以添加一个引用到System.Windows.Forms
及用途:
System.Windows.Forms.Control.MousePosition;
它必须是System.Windows.Forms.Control.MousePosition – 2010-11-20 13:44:00
还是在纯WPF使用PointToScreen。
这。很好,很干净。“ – 2012-08-30 19:21:27
”将表示Visual的当前坐标系的点转换为屏幕坐标中的点。“。这与鼠标位置有什么关系? – 2013-09-17 08:50:20
Mouse.GetPosition返回一个Point,PointToScreen将该点转换为屏幕坐标。 – erikH 2013-09-19 11:06:31
如果您在不同的分辨率,多台显示器等计算机上尝试了很多这些答案,您可能会发现它们无法可靠地工作。这是因为您需要使用变换来获取相对于当前屏幕的鼠标位置,而不是由所有显示器组成的整个查看区域。像这样...(其中“this”是一个WPF窗口)。
var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice;
var mouse = transform.Transform(GetMousePosition());
public System.Windows.Point GetMousePosition()
{
System.Drawing.Point point = System.Windows.Forms.Control.MousePosition;
return new System.Windows.Point(point.X, point.Y);
}
这工作,而不必使用形式或导入任何DLL:
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);
}
您可以使用TimerDispatcher(WPF定时器模拟)和Windows“挂钩”的组合,以捕获从运作系统光标位置。
[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;
}
}
该解决方案还解决了参数阅读过于频繁或过于频繁的问题,因此您可以自行调整。但请记住WPF方法超负荷,其中一个参数代表ticks
而不是milliseconds
。
TimeSpan(50); //ticks
- 1. 获取鼠标屏幕坐标点击
- 2. 如何在C#中获取当前的鼠标光标坐标?
- 3. WPF在viewmodel中获取鼠标坐标
- 4. OSMdroid如何获取屏幕坐标?
- 5. 如何获得与屏幕相关的光标坐标和WPF元素坐标?
- 6. 如何在WPF屏幕上获取鼠标位置?
- 7. C#如何获取屏幕上特定点的坐标。 (不是鼠标位置)
- 8. 获取当前坐标
- 9. 如何获取鼠标坐标和.push()?
- 10. 如何在屏幕抓取中捕获鼠标光标?
- 11. 获取屏幕坐标的css
- 12. 获取某个UITableViewCell的屏幕坐标?
- 13. 取所有屏幕坐标
- 14. 从UILongPressGestureRecognizer获取屏幕坐标
- 15. 如何将屏幕鼠标坐标转换为POINTS结构
- 16. 如何获取BHO中网页元素的屏幕坐标
- 17. 获取当前鼠标光标类型
- 18. jfreechart的获取鼠标坐标
- 19. Vte:在屏幕坐标中获取光标位置
- 20. 在C#中单击鼠标获取鼠标坐标
- 21. OpenGL坐标匹配屏幕坐标?
- 22. 将屏幕坐标转换为坐标
- 23. 如何根据鼠标点击获取3D中点的坐标?
- 24. 获取相对于屏幕的标记坐标Google Maps API v3
- 25. 可能使用Javascript获得当前鼠标坐标吗?
- 26. 如何获取转换的WPF控件上鼠标点击的坐标?
- 27. 使用jQuery获取鼠标坐标
- 28. 获取鼠标坐标(哈斯克尔)
- 29. 如何将Windows屏幕坐标转换为屏幕截图像素坐标?
- 30. 在BlackBerry上获取当前GPS坐标
鼠标坐标相对于什么?屏幕坐标,相对于一个窗口? – 2010-11-19 16:19:10
我的意思是在屏幕上的鼠标位置。 – 2010-11-19 18:10:35