获取其它文本的光标所在位置

时间:2021-02-04 10:48:42
我获取记事本的光标所在位置的时候总是不对,这是为什么,我指的不是鼠标,是那个输入的光标
我用iCur=SendMessage(NotePadwnd,EM_GETSEL,0,0);应该是当前光标的所在位置
SendMessage(NotePadwnd,EM_SETSEL,iCur,9);却不是想要的结果,为什么,难道消息不对,

3 个解决方案

#1


你是想要在编辑框中选中一些文本信息吗?

#2


其他文本,你看这消息对吗,是获得光标位置吗

#3


你说的那个叫Caret,通过EM_GETSEL等不是正规的做法。

有两个方案,我简述一下:
方案一:
1、找到目标窗口,FindWindow GetForegroundWindow 之类
2、找到目标线程id,GetWindowThreadProcessId(不通过窗口直接获取线程id也行)
3、将当前线程和目标线程AttachThreadInput
4、GetCaretPos,获取输入光标的位置
5、ClientToScreen转化到屏幕位置
方案二:
1、获取目标线程(同上)(如果是处理当前前台线程则不需要)
2、获取线程GUI信息,GetGUIThreadInfo
3、得到GUITHREADINFO结构
4、hwndCaret和rcCaret分别是输入光标所在窗口和位置

#1


你是想要在编辑框中选中一些文本信息吗?

#2


其他文本,你看这消息对吗,是获得光标位置吗

#3


你说的那个叫Caret,通过EM_GETSEL等不是正规的做法。

有两个方案,我简述一下:
方案一:
1、找到目标窗口,FindWindow GetForegroundWindow 之类
2、找到目标线程id,GetWindowThreadProcessId(不通过窗口直接获取线程id也行)
3、将当前线程和目标线程AttachThreadInput
4、GetCaretPos,获取输入光标的位置
5、ClientToScreen转化到屏幕位置
方案二:
1、获取目标线程(同上)(如果是处理当前前台线程则不需要)
2、获取线程GUI信息,GetGUIThreadInfo
3、得到GUITHREADINFO结构
4、hwndCaret和rcCaret分别是输入光标所在窗口和位置