2015-02-27 3 views
1

Я пытаюсь отправить сообщение (LB_SELECTSTRING) в элемент управления ListBox внутри (дочернего) окна с помощью pywin32. Я получил дескриптор окна без проблем, и у меня также есть идентификатор потока и идентификатор процесса родительского окна. Я понимаю, что элементы управления обрабатываются аналогично окнам, поскольку они имеют свои собственные дескрипторы, поэтому я пытаюсь понять, как найти элемент управления, используя его родительский дескриптор, и ничего не работает.Попытка найти ListBox для отправки сообщений

Код, который у меня есть, ниже, и он всегда вызывает исключение.

try: 
    _listbox1_hwnd = win32gui.FindWindowEx(_hwnd, None, "ListBox1", "Preferences") 
    if _listbox1_hwnd == 0: 
     raise Exception("Listbox1 wasn't found!") 
except Exception as e: 
    print e 
    sys.exit(0) 

Я также попытался с помощью метода FindWindow win32ui без везения (т.е. это также не)

try: 
    _listbox1_cwnd = win32ui.FindWindow("ListBox1", "Preferences") 
    if _listbox1_cwnd == 0: 
     raise Exception("Listbox1 wasn't found!") 
except Exception as e: 
    print e 
    sys.exit(0) 
+0

Ваш код ищет окна верхнего уровня. Вам нужно найти окно верхнего уровня и работать через своих детей. Почему бы вам не использовать автоматизацию? –

+0

Я действительно пробовал пройти через дочерние окна, пока еще не повезло. Я не уверен, что такое автоматизация, но причина, по которой я не использую autohotkey, заключается в том, что большинство из того, что я пишу, находится в python (пока я не смогу избавиться от битов в autohotkey, тогда все это будет python) , Я в основном просто обманываю, чтобы увидеть, как много я могу сделать с python, так как я нахожу язык проще. – dserver

+0

Если вы не хотите узнать о автоматизации, это прекрасно. –

ответ

1

Если вы находите язык Python проще, почему бы не использовать pywinauto? Я никогда не видел упрощенного инструмента автоматизации. И это очень pythonic.

+0

Я собираюсь попробовать это, спасибо – dserver

+0

Это самая простая вещь. Спасибо большое! – dserver

0

Что такое "ListBox1"? Это не похоже на имя класса списка. Используйте инструмент Spy ++, чтобы проверить имя класса списка.

+0

Вот что я использую. Если я щелкнул что-то в списке или проведу мышью, он сообщает ClassNN как ListBox1. Мне это показалось, так как это то, что использует autohotkey для поиска элементов управления, но, очевидно, это не autohotkey :) Я также должен упомянуть, что «Предпочтения» - это заголовок окна, содержащего список. – dserver

+0

Вы пытались изменить «Настройки» на NULL? –

+0

Я пробовал установить его в None, и это заставляет его потерпеть неудачу. Если я сделаю «ListBox1» ничем, кроме того, что это будет успешным, но, очевидно, это не хорошо, так как мне нужен элемент управления списком. Я не пробовал NULL. Это часть пакета ctypes? Pywin32 api говорит, что я могу дать ему строку или None, поэтому я решил, что если бы я дал ей None, это перевело бы это на NULL на системном уровне. – dserver

Смежные вопросы