2011-03-28 33 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問題中所建議的。

相關問題