如何从c ++中找出windows中的闪烁光标位置?在许多情况下,我需要点击闪烁光标位置的发送按钮,但我没有找到任何重要的功能来处理它。
OS win 7(64),c ++
答案 0 :(得分:4)
它被称为“插入符号”,光标是鼠标指针。您使用GetCaretPos()来获取其位置。但返回的位置是相对于拥有插入符号的窗口的客户区域。这可能意味着您需要先找到该窗口,然后使用GetForegroundWindow()。并且不发送按钮点击消息,它们被发布所以使用PostMessage()。
通过使用SendInput()来避免所有这些。
请注意,UIPI(UAC的用户界面组件)会阻止您将内容戳入由升级进程拥有的窗口。
答案 1 :(得分:2)
GetGUIThreadInfo()可能是你最好的选择;使用idThread = 0传递它以从当前活动的线程获取信息,然后检查返回的GUITHREADINFO结构的rcCaret成员。然后,您需要使用带有hwndCaret值的ClientToScreen()将客户端相对坐标转换为屏幕坐标。
请注意,这仅适用于使用Win32插入功能的应用程序 - 特别是SetCaretPos()。如果一个应用程序在不使用它们的情况下绘制自己的插入符号,那么您可能无法获得任(有些应用程序,比如Word,会绘制自己的插入符号,但仍然会调用SetCaretPos,以便需要跟踪插入符号的辅助功能可以使用此技术。)
你得到的矩形有时可能比实际的插入符更宽。当一个位图被用于插入符号时,就像从右到左或左到右的插入符号一样,顶部有一个“标记”,你会得到一个比实际的插入符号区域,可能需要调整或以其他方式确定实际插入符号条在此区域内的位置 - 它可能位于或可能不位于中间位置。看起来像Notepad ++你应该没问题。