我最近开始学习Python,并写了一个脚本,告诉我什么时候某个网站改变内容。 然后,我将其作为计划任务添加到Windows,以便每10分钟运行一次。 我想通知网站改变马上,所以我添加了一个win32ui消息框,popup如果脚本检测到网站已经改变。 这里是我用于MessageBox的小代码片断(我知道有想象力的文本):
win32ui.MessageBox("The website has changed.", "Website Change", 0)
我的问题是,我花了大部分时间使用远程桌面,所以当MessageBoxpopup时,它位于远程桌面会话后面,有没有办法强制MessageBox出现在它的顶部?
在脚本运行时,类似的说明命令行在我不想要的远程桌面会话上打开很短暂,有什么方法可以阻止这种行为?
我很高兴与Windows特定的解决scheme,因为我知道这可能意味着处理窗口pipe理器或可能的另一种方式来通知我,而不是使用MessageBox。
当您从任务计划程序启动任何东西时,Windows会阻止任何“ 简单 ”的方法将您的窗口或对话框置顶。
第一种方法 – 使用MB_SYSTEMMODAL
(4096值)标志。 根据我的经验,它使Msg对话框“总是在最前面”。
win32ui.MessageBox("The website has changed.", "Website Change", MB_SYSTEMMODAL)
第二种方法 – 尝试通过以下调用将控制台/窗口/对话框置于前面。 当然,如果您使用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)
使消息框系统模式将导致它弹出每个应用程序,但没有人可以交互,直到它被解散。 考虑创建一个自定义对话框窗口,您可以将其带到前面或使用通知气泡。
Windows试图使其难以在活动应用程序上弹出一个窗口。 用户觉得烦人,特别是因为中断窗口通常会窃取键盘焦点。
Windows提供这样的通知的方式是在通知区域使用气球而不是消息框。 通知气球不偷窃焦点,(据说)较少分心。
我不知道如果python Windows用户界面库提供通知气球的包装。