主页 > 编程资料 > C# >
发布时间:2018-02-11 作者:网络 阅读:497次
#region 得到光标在屏幕上的位置
[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

TIM截图20180211153309.png

关键字词: