如何让Python的MessageboxW窗口始终置顶?

7

背景:

我有一个小脚本,使用 Windows 内置的消息框(参考:MSDN MessageBox)通过 ctypes 导入来创建消息框,该脚本用于 Windows 操作系统。

问题:

目前,消息框将出现在所有其他窗口的顶部,但由于它是如此小的窗口,用户可以轻松单击另一个窗口,这可能会隐藏消息框。

我想要什么

我希望将消息框始终保持在其他窗口的顶部。如果无法实现,则是否有一种方法可以增加消息框的尺寸?

示例代码:

import ctypes

ctypes.windll.user32.MessageBoxW(0, text, title, 0x00010000)
1个回答

10
import ctypes

text = 'Using MB_SYSTEMMODAL'
title = 'Some Title'

ctypes.windll.user32.MessageBoxW(0, text, title, 0x1000)

MB_SYSTEMMODAL(0x1000)具有WS_EX_TOPMOST(0x40000)风格。

MessageBoxEx函数似乎只使用WS_EX_TOPMOST(0x40000)样式就能正常工作。

import ctypes

text = 'Using WS_EX_TOPMOST'
title = 'Some Title'

ctypes.windll.user32.MessageBoxExW(0, text, title, 0x40000)

MessageBox函数没有改变大小的参数。也许像tkinter或其他GUI工具包这样的替代方案可以改变消息框的大小(尽管如果它只是MessageBoxW的包装器,则可能不行),或者您可以创建一个自定义窗口来使用。

请参阅MSDN MessageBox函数以获取要使用的值。

还请参阅MSDN MessageBoxEx函数


1
MB_SYSTEMMODALWS_EX_TOPMOST都可以创建一个位于所有窗口之上的消息框,但它们不会一直保持在最上层,这就是问题所在。用户很容易点击其他地方使其消失。 - Kotosif
2
如果您使用HWND参数,则消息框将成为一个子窗口,使用父窗口HWND可以帮助防止在消息框显示时与父窗口进行交互。如果没有父窗口可用,则通常使用WS_EX_TOPMOST。我不确定如何隐藏最顶层的消息框。我不确定“轻松点击”准确意味着什么。 - michael_heath
我的错误,看起来WS_EX_TOPMOST对我确实有效。看来我一直在最后一个参数中使用了错误数量的0! - Kotosif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接