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