使Win32消息框出现在其他程序上

2024-09-29 02:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始学习Python,并编写了一个小脚本,在某个网站更改内容时通知我。然后我将其作为计划任务添加到Windows中,以便它每10分钟运行一次。我想立即得到网站更改的通知,所以我添加了一个win32ui消息框,如果脚本检测到网站已更改,将弹出该消息框。下面是我在MessageBox中使用的小代码片段(我知道,这是一段富有想象力的文本):

win32ui.MessageBox("The website has changed.", "Website Change", 0)

我的问题是,我大部分时间都在使用远程桌面,所以当消息框弹出时,它位于远程桌面会话的后面,有没有办法强制消息框出现在上面?

同样,当脚本运行时,命令行会在远程桌面会话(我不希望这样做)上非常短暂地打开,有没有办法停止这种行为?

我对Windows特定的解决方案很满意,因为我知道这可能意味着要处理窗口管理器,或者可能是一种通知我的替代方法,而不是使用消息框。


Tags: the代码文本脚本消息内容网站windows
3条回答

当您从任务调度程序启动任何内容时,Windows会阻止任何将窗口或对话框置于顶层的“简单”方法。

  1. 第一种方式-使用MB_SYSTEMMODAL(4096值)标志。以我的经验,它使味精对话“永远在最上面”。

    win32ui.MessageBox("The website has changed.", "Website Change", MB_SYSTEMMODAL)
    
  2. 第二种方法-尝试通过以下调用将控制台/窗口/对话框置于最前面。当然,如果您使用MessageBox,那么在调用MessageBox之前必须这样做(对于您自己创建的窗口)。

    SetForegroundWindow(Wnd);
    BringWindowToTop(Wnd);
    SetForegroundWindow(Wnd);
    

至于控制台窗口的闪烁,您可以尝试在隐藏状态下启动Python。例如,使用ConEmu、'HidCon'或cmdow。参考他们的参数,比如:

ConEmu -basic -MinTSA -cmd C:\Python27\python.exe C:\pythonScript.py
    or
CMDOW /RUN /MIN C:\Python27\python.exe C:\pythonScript.py

通过使用pyw扩展名而不是简单的py命名脚本来避免命令窗口闪烁。您也可以使用pythonw.exe,而不是python.exe,这取决于您的需求。

http://onlamp.com/pub/a/python/excerpts/chpt20/index.html?page=2

使用ctypes它显示一个非常容易使用的windows错误消息框

import ctypes
if condition:
    ctypes.windll.user32.MessageBoxW(0, u"Error", u"Error", 0)

相关问题 更多 >