首页 > 代码库 > 光标跟随
光标跟随
#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
光标跟随
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。