как читать значения полей диалогового окна с помощью python?

#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