如何在屏幕上獲得當前的鼠標協調? 我知道只有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