我創建簡單的腳本,它試圖獲得的股權enter link description here計算:我的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])
我決定,因爲我需要它也在努力PokerStove最小化時使用的窗口消息,而不是SendKey。
當PokerStove最小化時,此腳本可以正常工作。但是如果不是,會發生奇怪的事情。腳本正確填寫文本編輯並單擊按鈕,我得到正確的結果。但在那之後改變了他的標題到一些奇怪的事情:
所以看起來PokerStove仍在計算,但結果準備就緒。由於這一變化,當我再次啓動我的腳本時,它會失敗。但是當PokerStove最小化時,我沒有這個問題。
我懷疑我發送郵件到編輯框有問題。因爲如果我手動填充它們並點擊按鈕,那麼一切都很好。當我使用set_hand
函數填充它時,即使我手動點擊按鈕,我也會得到這個奇怪的結果。
那麼我的腳本有什麼問題?
編輯:
當我連接間諜++到EvaluateButton我可以看到按鈕仍然得到WM_SETTEXT消息也將它設定爲「停止(完成99%)」。
EDIT2:
它在Windows 7中,但在家裏在Windows XP在VirtualBox的代碼測試工作正常...
明天我會重新測試它,因爲我無法在家中複製它(奇怪的是)。 – Adam
當我使用'win32api.SendMessage'發送字符時,我在Windows 7上遇到了同樣的問題。 – Adam
嘗試使用間諜窗口和所有兒童來確定編碼消息和實際擊鍵結果之間的差異。 – Maximus