Python: получить позицию каретки

Я пытаюсь получить позицию каретки в Python. Я пытался использовать win32gui.GetCaretPos(), но он всегда возвращает 0,0.

У вас есть идеи, как заставить его работать?

Спасибо Крис


person Chris Hki    schedule 01.11.2013    source источник
comment
Пожалуйста, опубликуйте свой код, чтобы сделать его немного более понятным.   -  person aIKid    schedule 01.11.2013


Ответы (1)


Если курсор находится в окне, созданном другим потоком, вам нужно вызвать AttachThreadInput. Предполагая, что вам нужна каретка окна переднего плана, вы можете добраться до нее следующим образом:

import win32gui
import win32process
import win32api

fg_win = win32gui.GetForegroundWindow()
fg_thread, fg_process = win32process.GetWindowThreadProcessId(fg_win)
current_thread = win32api.GetCurrentThreadId()
win32process.AttachThreadInput(current_thread, fg_thread, True)
try:
    print win32gui.GetCaretPos()
finally:
    win32process.AttachThreadInput(current_thread, fg_thread, False) #detach
person Janne Karila    schedule 01.11.2013
comment
работает во всех редакторах... кроме того, который мне нужен :-) Все равно большое спасибо! - person Chris Hki; 01.11.2013
comment
Что было бы эффективным способом постоянного подключения или опроса изменений в активном окне? - person koral; 19.12.2019
comment
@koral Лучше начать новый вопрос, тем более, что этот закрыт. - person Janne Karila; 19.12.2019