Что не так с моей частью кода SendMessage / PostMessage?

Я создал простой скрипт, который пытается вычислить эквити введите описание ссылки здесь:

import time
import win32api
import win32con

from pywinauto import application

def getEquity(ps_pid, hand1, hand2):
def set_hand(handle, hand, kf=0):
win32api.SendMessage(handle, win32con.WM_SETFOCUS, 0, 0) # f: losefocus
#win32api.SendMessage(handle, win32con.WM_GETDLGCODE, 0, 0)
time.sleep(0.05)
len = win32api.SendMessage(handle, win32con.WM_GETTEXTLENGTH, 0, 0)
time.sleep(0.05)
win32api.SendMessage(handle, win32con.EM_SETSEL, 0, len)
time.sleep(0.05)
for c in hand:
win32api.PostMessage(handle, win32con.WM_CHAR, ord(c), 0)
#win32api.SendMessage(handle, win32con.WM_GETDLGCODE, 0, 0)
time.sleep(0.05)
win32api.SendMessage(handle, win32con.WM_KILLFOCUS, 0, 0)

app = application.Application()
app.connect_(process=ps_pid)

set_hand(app.PokerStove.REdit1.handle, hand1)
set_hand(app.PokerStove.REdit2.handle, hand2)

app.PokerStove.Evaluate.Click()
while app.PokerStove.EvaluateButton.WindowText() != 'Evaluate':
time.sleep(0.1)

return app.PokerStove.Edit12.GetLine(0)

import sys
print getEquity(int(sys.argv[1]), sys.argv[2], sys.argv[3])

Я решил использовать оконные сообщения вместо SendKey, потому что мне нужно, чтобы оно работало также, когда PokerStove свернут.

Этот скрипт отлично работает, когда PokerStove свернут. Но странные вещи случаются, когда нет. Скрипт правильно заполняет текстовые изменения и нажимает кнопку, и я получаю правильные результаты. Но после этого измените заголовок на что-то странное:

PokerStove

Похоже, PokerStove все еще работает, но результаты уже готовы. Из-за этого изменения при повторном запуске сценария произойдет сбой. Но когда PokerStove свернут, у меня нет этой проблемы.

Я подозреваю, что сделал что-то не так с отправкой сообщений в поля редактирования. Потому что, если я заполняю их вручную и нажимаю кнопку, то все в порядке. Когда я заполняю его, используя set_hand функции, то даже если я нажму кнопку вручную, я получу этот странный результат.

Так что не так с моим сценарием?

РЕДАКТИРОВАТЬ:

Когда я подключаю spy ++ к EvaluateButton, я вижу, что кнопка все еще получает сообщение WM_SETTEXT, в котором для нее установлено значение «Стоп (завершено на 99%)».

EDIT2:

Он был протестирован на Windows 7. Но дома на Windows XP в VirtualBox код работает нормально …

1

Решение

Вы отправляете символы с PostMessage, Эта функция асинхронная. Хм, результаты следования SendMessage могут быть странными.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]