新线程中的PumpMessages

时间:2018-07-26 09:39:59

标签: python pywin32

我目前正在使用python(在屏幕上绘制文本)制作游戏叠加层。 我在那里使用pywin32创建了一个不可见的全屏窗口。 我的问题是我创建了窗口并将消息泵入新线程。

def run_overlay_thread():
    thr = threading.Thread(target=game_overlay.main, args=())
    thr.setDaemon(True)
    #thr.setDaemon(False)
    thr.start()

所以当我这样调用RedrawWindow函数时:

win32gui.RedrawWindow(hWindow, None, None, win32con.RDW_INVALIDATE | win32con.RDW_ERASE)

什么也没有发生(不会触发WM_PAINT消息)。

def wndProc(hWnd, message, wParam, lParam):
    print('called with message:{}'.format(message))
    if message == win32con.WM_PAINT:
        hdc, paintStruct = win32gui.BeginPaint(hWnd)
        ... more draw code ...

在创建窗口时,将触发一次WM_PAINT消息,因此我可以看到显示的文本,但是无法更新文本。 我必须在新线程中调用PumpMessages,因为我想运行应用程序其他部分的初始化代码(例如gui或“后端”)

有人知道如何解决此问题吗? 任何帮助,将不胜感激! 对不起,我的英语不好:)

1 个答案:

答案 0 :(得分:0)

通过使用InvalidateRect而不是RedrawWindow解决了该问题。 我的新代码:

    win32gui.InvalidateRect(hWindow, None, True);