gpt4 book ai didi

c++ - 我的 SendMessage/PostMessage 部分代码有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:34 25 4
gpt4 key购买 nike

我创建了一个简单的脚本,它尝试获取由 enter link description here 计算的净值:

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% 完成)”。

编辑 2:

它是在 Windows 7 上测试的。但是在家里,在 VirtualBox 代码中的 Windows XP 上工作正常......

最佳答案

您使用 PostMessage 发送字符。这个函数是异步的。嗯,跟随 SendMessage 的结果可能很奇怪。

关于c++ - 我的 SendMessage/PostMessage 部分代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12304092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com