GetGUIThreadInfo () , вероятно, ваш лучший выбор; передайте его с idThread = 0, чтобы получить информацию из текущего активного потока, а затем проверьте член rcCaret возвращенной структуры GUITHREADINFO. Затем вам нужно будет использовать ClientToScreen () со значением hwndCaret для преобразования относительных к клиенту координат в экранные координаты.
Обратите внимание, что это работает только для приложений, которые используют функции каретки Win32 - в частности, SetCaretPos (). Если приложение рисует свою собственную карету, не используя их, вы можете не получить ничего значимого в ответ. (Некоторые приложения, такие как Word, рисуют свою собственную карету, но все еще вызывают SetCaretPos, чтобы вспомогательные средства, которые должны отслеживать каретку, могли использовать эту технику.)
Прямоугольник, который вы получаете назад, иногда может быть шире, чем фактическая каретка. Когда для каретки используется растровое изображение, как в случае кареток справа налево или слева направо, с небольшим «флагом», прикрепленным к вершине, вы получите прямоугольник, который немного шире, чем фактическая область каретки, и, возможно, потребуется скорректировать или иным образом выяснить, где в этой области находится фактическая планка каретки - она может быть или не быть точно посередине. Похоже, что для Notepad ++ все должно быть в порядке.