月光小丫头 发表于 2023-9-20 16:04:38

获取光标位置方法研究




获取光标位置方法研究

获取光标位置可以使用GetCaretPos函数获取位置,也可以通过GetGUIThreadInfo函数获取位置。

1、GetCaretPos函数获取光标位置,实现代码:

<div>CPoint point; CRect rect; GetWindowRect(&amp;rect);
HWND hwnd=::GetFocus();
HWND pHwnd=::GetForegroundWindow();
AttachThreadInput(GetCurrentThreadId(),::GetWindowThreadProcessId(pHwnd,NULL),TRUE);
::GetCaretPos(&amp;point);
::ClientToScreen(hwnd,&amp;point);
AttachThreadInput(GetCurrentThreadId(),::GetWindowThreadProcessId(pHwnd,NULL),FALSE);</div>

2、GetGUIThreadInfo函数获取光标位置,实现代码:

<div>#include <winable.h>
HWND hwnd;
GUITHREADINFO pg;
POINT point; //光标位置
pg.cbSize=48;
::GetGUIThreadInfo(NULL,&amp;pg);
hwnd=pg.hwndCaret;
if (pg.hwndCaret) {
point.x=pg.rcCaret.right;
point.y=pg.rcCaret.bottom;
::ClientToScreen(pg.hwndCaret,&amp;point);
}
//CString str; //str.Format("x=%d,y=%d",point.x,point.y);
//AfxMessageBox(str);</div>

总结:GetCaretPos函数能获取WIN32一些程序窗口中光标位置,但是在IE7和WORD里GetCaretPos是不能获取光标位置的。

而GetGUIThreadInfo函数获取窗口坐标位置是没有限制,不过在VCL、GTK、SWT界面框架的窗口具体能不能得到位置没有试过。


页: [1]
查看完整版本: 获取光标位置方法研究