如何在不关注焦点的屏幕上绘制通知并始终保持在最顶层(Windows)

时间:2011-03-28 21:14:40

标签: python windows notifications

我正试图找到一种方法在屏幕上绘制一些内容,这些内容将显示在正在运行的任何其他内容(甚至是全屏应用程序)之上,但不会窃取焦点,或者像普通的应用程序或窗口一样。它应该是纯粹的视觉效果,不得以任何其他方式干涉。

Python更受欢迎。

我的目标是能够让我的python脚本在屏幕上显示通知,可能只是一些文本(透明背景),并让它显示在当时你正在做的其他事情的前面

我已经尝试过wxpython,但是要么窗口窃取焦点,要么我使用技巧不会窃取焦点,它不会出现在我的全屏幕应用程序前面。感觉wxpython并不是我想做的事情,因为它不应该是一个GUI,它只是一个暂时出现的通知,不需要用户输入。

2 个答案:

答案 0 :(得分:1)

一般情况下,您不能编写一个应用程序,以确保其他应用程序保持在其他应用程序之上。

由于全屏应用程序是最顶层的窗口,因此操作系统无法知道您的最顶层窗口需要比其他最顶层窗口更好。

理想情况下,您应该找到一些与其他应用程序合作的方式。

然而这里有一些你可以尝试的技巧,这可能适用于某些情况:

  • 您可能需要直接使用Win32 API。
  • 请勿使用SetActive激活您的窗口,只需将SetWindowPosSWP_NOACTIVATE一起使用 并HWND_TOPMOST将其移至前线而不激活。
  • 尝试将您的窗口设置为禁用,然后它无法窃取焦点,这是问题的一半。
  • 您可能需要将SPI_SETFOREGROUNDLOCKTIMEOUT中的SystemParametersInfo设置为较小的值。
  • 您可能必须反复尝试前景,直到获得它为止。

请注意,如果另一个窗口做同样的事情,这些技巧将无济于事。

这里有用的文件:

答案 1 :(得分:0)

如果Qt是一个选项,您可以尝试使用this问题中建议的Qt::WA_ShowWithoutActivating属性。