GetGUIThreadInfo(), вероятно, лучший выбор; передайте его с idThread = 0, чтобы получить информацию из текущего активного потока, а затем проверьте член rcCaret возвращенной структуры GUITHREADINFO. Затем вам нужно будет использовать ClientToScreen() со значением hwndCaret, чтобы преобразовать координаты относительно клиента в координаты экрана.
Обратите внимание, что это работает только для приложений, использующих функции каретки Win32, в частности SetCaretPos(). Если приложение рисует свою собственную каретку без их использования, вы можете не получить ничего значимого. (Некоторые приложения, такие как Word, рисуют собственный карет, но все же звоните в SetCaretPos, так что вспомогательные средства доступности, необходимые для отслеживания каретки, могут использовать эту технику.)
Прямоугольник, который вы можете получить, иногда может быть шире, чем фактический карет. Когда для каретки используется растровое изображение, как в случае с правыми слева или слева направо, с небольшим «флагом», прикрепленным к вершине, вы получите прямоугольник, который немного шире, чем фактической области каретки, и, возможно, придется отрегулировать или иначе определить, где в этой области находится фактическая полоса каретки - она может быть или не быть в точной середине. Похоже, для Notepad ++ все должно быть хорошо.
Для меня это мало смысла. Нажатие кнопки происходит с кнопками и не зависит от положения. Кроме того, кнопки не имеют каретки (это название мигающего курсора). Прямой ответ на ваш вопрос заключается в том, что вы просто вызываете 'GetFocus', когда фокус находится в вашем процессе, или' GetGUIThreadInfo', если он находится в другом процессе. Возможно, было бы лучше, если бы вы могли объяснить, какова ваша основная цель. Что мотивирует вопрос? –
Когда я тестирую более одного кода, я часто помещаю этот текстовый код в блокнот ++ и без малейших манипуляций с autohotkey я отправляю ярлык notepad ++, чтобы выделить весь текст и скопировать их в визуальный проект .cpp-файл. После этого auothokey компилирует и запускает этот код. Поэтому я посылаю две команды, чтобы выбрать все, а вторая - копировать. Таким образом, здесь возникает проблема, если вы выберете весь текст, ваш карет станет в верхней части текста. Пункт positionig caret состоит в том, что у вас нет собственного поиска, где вы в последний раз останавливаетесь, если вы сохраните позицию, прежде чем выбирать, что это легко сделать далеко. –