2011-03-28 39 views
1

我试图找到一种方法在屏幕上绘制一些东西,这些东西将显示在正在运行的其他任何东西之上(即使是全屏应用程序),但不会窃取焦点,或者像普通的应用程序或窗口一样。它应该是纯粹的视觉效果,不能以任何其他方式干涉。如何在屏幕上绘制一个不占用焦点并始终保持最佳状态的通知(Windows)

Python是首选。

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

我试过wxpython,但是这个窗口偷了焦点,或者我使用这个技巧来不偷取焦点,它并没有出现在我的全屏应用程序前面。感觉像wxpython并不是真正为我想做的事情做的,因为它不应该是一个GUI,它应该是一个临时出现的通知,并且不需要用户输入。

+0

你是否愿意接受,这可能无法实现? – 2011-03-28 21:40:09

+0

@大卫:我担心可能是这种情况.. – Acorn 2011-03-28 21:47:52

回答

1

一般来说,你不能编写一个应用程序,它保证停留在其他应用程序之上,并保持在其他应用程序之上。

由于全屏幕应用程序窗口是最顶层,有没有办法让OS知道你的顶层窗口需要比其他顶层窗口topmoster。

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

然而这里有一些技巧,你可以尝试,这可能对某些情况下工作:

  • 你可能将不得不直接使用Win32 API的。
  • 请勿使用SetActive激活您的窗口,只需使用SetWindowPosSWP_NOACTIVATEHWND_TOPMOST将其移动到前端而不激活。
  • 尝试将您的窗口设置为禁用,然后它无法窃取焦点,这是问题的一半。
  • 您可能必须将中的SPI_SETFOREGROUNDLOCKTIMEOUT设置为较小的值。
  • 您可能需要重复尝试前景,直到您找到它。

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

有用的文件建立在这里:

0

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

相关问题