我正在尝试找到一种在屏幕上绘制某些内容的方法,这些内容将显示在正在运行的其他任何内容(甚至是全屏应用程序)之上,但不会窃取焦点,也不会像普通应用程序或窗口一样运行。它应该是纯粹的视觉效果,不以任何其他方式干扰。
Python 更好。
我的目标是能够让我的Python脚本在屏幕上显示通知,可能只是一些文本(透明背景),并让它显示在你当时正在做的任何其他事情的前面.
我尝试过wxpython,但是要么窗口窃取焦点,要么我使用技巧不窃取焦点,并且它没有出现在我的全屏应用程序前面。感觉 wxpython 并不是真正为我想做的事情而设计的,因为它不应该是一个 GUI,它只是应该是一个临时出现的通知,不需要用户输入。
最佳答案
一般来说,您编写的应用程序不能保证始终领先于其他应用程序,而该应用程序又想始终领先于其他应用程序。
由于全屏应用程序是最顶层的窗口,因此操作系统无法知道您的最顶层窗口需要比其他最顶层窗口更顶层。
理想情况下,您应该找到某种与其他应用程序合作的方式。
但是以下是您可以尝试的一些技巧,它们可能适用于某些情况:
- 您可能必须直接使用 Win32 API。
- 不要使用 SetActive 激活窗口,只需将
SetWindowPos
与SWP_NOACTIVATE
结合使用 和HWND_TOPMOST
将其移到前面而不激活。 - 尝试将窗口设置为禁用,这样它就无法窃取焦点,这就是问题的一半。
- 您可能需要将
SystemParametersInfo
中的SPI_SETFOOREGROUNDLOCKTIMEOUT
设置为一个较小的值。 - 您可能需要反复尝试前台操作,直到获得它。
请注意,如果其他窗口也在做同样的事情,这些技巧将无济于事。
这里有用的文档:
关于python - 如何在屏幕上绘制不获取焦点并始终位于顶部的通知(Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5465164/