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

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

我的问题是,我大部分时间都在使用远程桌面,所以当 MessageBox 弹出时,它位于远程桌面 session 后面,有什么方法可以强制 MessageBox 出现在它上面吗?

在类似的说明中,当脚本运行时,命令行在我不想要的远程桌面 session 上非常短暂地打开,有没有办法阻止这种行为?

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

最佳答案

当您从 Task Scheduler 启动任何内容时,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
    

    关于python - 让 Win32 MessageBox 出现在其他程序之上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11765324/

    10-12 04:03
    查看更多