3

我是 python 新手,我需要一个消息框。我使用了 ctypes,但它会在所有其他程序下打开消息框。我怎样才能使它成为所有程序之上?

import ctypes
def run(x=0):
    STOP = False
    x += 5
    MessageBox = ctypes.windll.user32.MessageBoxA
    reply = MessageBox(None, 'text', 'title', 1)
    if reply == 1 and not STOP:
        threading.Timer(3, run).start()
    else:
        STOP = True;
4

1 回答 1

3

您正在传递NULLhWnd参数MessageBox。从文档中:

要创建的消息框的所有者窗口的句柄。如果此参数为 NULL,则消息框没有所有者窗口。

因此,消息框没有所有者窗口。这意味着它很可能出现在其他窗口后面。理想情况下,您应该在应用程序中传递适当所有者窗口的窗口句柄。拥有的窗口总是出现在其所有者的上方。这是控制哪些窗口出现在其他窗口之上的最正常的方法。

但是,我怀疑您可能会发现很难想出这样的窗把手。在这种情况下,您可能会发现MB_TOPMOST在参数中包含标志(uType参数编号 4)可以满​​足您的需要。

但是,很难确定您的确切需求是什么,因为您所要求的显然是不可能实现的。你问窗户

凌驾于所有程序之上

嗯,这显然是不可能的,这可以通过证明一个矛盾来证明。假设您的窗口显示在所有其他窗口之上。如果您的窗口可以做到这一点,那么另一个窗口也可以。显然你不能有两个不同的窗口显示在所有其他窗口之上。

于 2013-04-28T12:39:06.197 回答