我最近开始学习Python,并写了一个小脚本,当某个网站更改内容时通知我。然后我将它作为计划任务添加到Windows中,这样它就可以每10分钟运行一次。我想被告知网站的变化马上,所以我添加了一个win32ui的消息框,弹出,如果脚本检测到该网站已更改。下面是我用于MessageBox的小代码片段(我知道,这是一段富有想象力的文字):
win32ui.MessageBox("The website has changed.", "Website Change", 0)
我的问题是,我大部分时间都在使用远程桌面,所以当MessageBox弹出时,它位于远程桌面会话的后面,有没有办法强制MessageBox出现在它的上面?
同样的,当脚本运行时,命令行会在远程桌面会话上非常短暂地打开,这是我不希望的,有什么方法可以阻止这种行为吗?
我很高兴与Windows的具体解决方案,因为我知道这可能意味着处理窗口管理器或可能的替代方式来通知我,而不是使用MessageBox。
7条答案
按热度按时间pbpqsu0x1#
当您从任务计划程序启动任何东西时,Windows会阻止任何将窗口或对话框置于顶部的“简单”方法。
1.第一种方式-使用
MB_SYSTEMMODAL
(4096值)标志。根据我的经验,它使消息对话框“总是在最上面”。1.第二种方法-尝试使用Following调用将您的控制台/窗口/对话框放在前面。当然,如果你使用
MessageBox
,你必须在调用MessageBox
之前这样做(对于你自己创建的窗口)。至于控制台窗口的 Flink ,您可以尝试以隐藏状态启动Python。例如,使用ConEmu、'HidCon'或cmdow。参考它们的参数,类似于:
cnjp1d6j2#
避免命令窗口flash的方法是使用
pyw
扩展名而不是简单的py
来命名脚本。您也可以使用pythonw.exe
而不是python.exe
,这真的取决于您的需求。参见http://onlamp.com/pub/a/python/excerpts/chpt20/index.html?page=2
wrrgggsh3#
使用ctypes它显示一个windows错误消息框非常好用
lx0bsm1f4#
这对我很有效:
用法:
jgovgodb5#
将消息框设置为系统模式将导致它在每个应用程序上弹出,但在它被关闭之前,不能与任何应用程序进行交互。请考虑创建一个可以放在最前面的自定义对话框窗口,或者使用通知气泡。
ckocjqey6#
Windows试图使其难以在活动应用程序上弹出窗口。用户觉得这很烦人,特别是因为中断窗口通常会窃取键盘焦点。
Windows给予这样的通知的方式是在通知区域中使用气球而不是消息框。通知气球不会窃取焦点,而且(据说)更少分散注意力。
我不确定Python Windows UI库是否提供了notification balloons的 Package 器。
2eafrhcq7#
非常简单的模式异步消息框与Python和MSG命令的帮助下(在Win10上工作):
在Python中,我一直使用
subprocess
发送CMD命令,允许我读取和处理输出,查找错误等。