太简单了 第一种 API [DllImport("User32.dll")] public static extern int GetCursorPos(out Point point); public static Point ShowPoint() { Point showPoint = new Point(); GetCursorPos(out showPoint); return showPoint; }第二种System.Windows.Forms.Cursor.Position这是最直接的
第一种 API [DllImport("User32.dll")]
public static extern int GetCursorPos(out Point point); public static Point ShowPoint()
{
Point showPoint = new Point();
GetCursorPos(out showPoint);
return showPoint;
}第二种System.Windows.Forms.Cursor.Position这是最直接的
楼主有没有想哭的感觉?虽然你说得非常明白了,是插入点的位置,而非鼠标指针的位置,可是还是有人在......要实现你的要求,需要使用GetCaretPos这个函数,不过这个函数只对当前程序有效,如果是别的程序,需要附加输入队列
所以还需要使用GetForegroundWindow和AttachThreadInput
[DllImport("user32")]
public static extern bool GetCaretPos(out Point lpPoint);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern IntPtr GetFocus();
[DllImport("user32.dll")]
private static extern IntPtr AttachThreadInput(IntPtr idAttach, IntPtr idAttachTo, int fAttach);
[DllImport("user32.dll")]
private static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("kernel32.dll")]
private static extern IntPtr GetCurrentThreadId();
[DllImport("user32.dll")]
private static extern void ClientToScreen(IntPtr hWnd, ref Point p); private Point CaretPos()
{
IntPtr ptr = GetForegroundWindow();
Point p = new Point(); //得到Caret在屏幕上的位置
if (ptr.ToInt32() != 0)
{
IntPtr targetThreadID = GetWindowThreadProcessId(ptr, IntPtr.Zero);
IntPtr localThreadID = GetCurrentThreadId(); if (localThreadID != targetThreadID)
{
AttachThreadInput(localThreadID, targetThreadID, 1);
ptr = GetFocus();
if (ptr.ToInt32() != 0)
{
GetCaretPos(out p);
ClientToScreen(ptr, ref p);
}
AttachThreadInput(localThreadID, targetThreadID, 0);
}
}
return p;
}
#endregion