#python #api
#питон #API
Вопрос:
Я пытаюсь считывать значения из полей диалогового окна.
В конфигурации диалогового окна у меня есть это:
#define IDC_SYMBOL 8011
#define IDC_SHARES 8012
изображение моментального снимка диалогового окна
это мой простой код, который я попробовал:
import win32gui,win32con
wT="my_dialog"
dlg=win32gui.FindWindow(None,wT)
d1=win32gui.GetDlgItem(dlg, 8011)
d2=win32gui.GetDlgItem(dlg, 8012)
print('d1: ', d1)
print('d2: ', d2)
def dumpWindow(hwnd, wantedText=None, wantedClass=None):
windows = []
hwndChild = None
while True:
hwndChild = win32gui.FindWindowEx(hwnd, hwndChild, wantedClass, wantedText)
if hwndChild:
textName = win32gui.GetWindowText(hwndChild)
className = win32gui.GetClassName(hwndChild)
windows.append((hwndChild, textName, className))
else:
return windows
windows = dumpWindow(dlg, wantedText='Symbol')
print(windows)
И это то, что я получаю, когда запускаю его:
d1: 1051340
d2: 920324
[(9112016, 'Symbol', 'Static')]
Как мне прочитать фактические значения в этих полях диалогового окна?
Я также попытался получить текст элемента диалогового окна:
dText=win32gui.GetDlgItemText(dlg, 8011)
print('dText: ', dText)
и результат пуст, в то время как ожидаемый результат — «AAPL», например, или что там есть.
dText:
Ответ №1:
Почему вы не используете GetDlgItemText.
Обычно эта функция возвращает текст диалогового элемента управления
Комментарии:
1. Потому что, когда я пытаюсь получить текстовое значение, я ничего не получаю.
dText=win32gui.GetDlgItemText(dlg, 8011) print('dText: ', dText)
2. кто-нибудь знает, почему я не получаю значение диалогового поля?
3. На каком языке вы создаете свое окно? Это на C или C ?. Вы уверены, что элементы управления имеют правильный идентификатор?
Ответ №2:
Решение:
from sys import exit
import win32gui,win32con
wT="my_dialog"
dlg=win32gui.FindWindow(None,wT)
d1=win32gui.GetDlgItem(dlg, 8011) #symbol
def getEditText(hwnd):
buffer = win32gui.PyMakeBuffer(255)
bufLen = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 255, buffer)
win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, 255, buffer)
text = buffer[0:bufLen*2]
return text
print ('Symbol: ', str(getEditText(d1),'utf-16'))
этот скрипт печатает выбранный символ:
Symbol: ZVZZT