Как нарисовать уведомление на экране, которое не фокусируется и всегда остается сверху (Windows) - PullRequest
1 голос
/ 29 марта 2011

Я пытаюсь найти способ нарисовать на экране что-то, что будет отображаться поверх всего, что работает (даже полноэкранные приложения), но не будет красть фокус или действовать как обычное приложение или окно.Он должен быть чисто визуальным и не мешать другим способом.

Предпочтительным является Python.

Я хочу, чтобы мой скрипт Python отображал уведомление на экране.возможно, просто какой-то текст (прозрачный фон), чтобы он показывался перед чем-либо еще, что вы делаете в данный момент.

Я пробовал wxpython, но либо окно крадет фокус, либо я используютрюк, чтобы не красть фокус, и это не появляется перед моими полноэкранными приложениями.Такое ощущение, что wxpython на самом деле не создан для того, что я хочу делать, поскольку он не должен быть графическим интерфейсом, он просто должен быть уведомлением, которое появляется временно и не требует ввода данных пользователем.

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Как правило, вы не можете написать приложение, которое гарантирует, что вы останетесь поверх других приложений, которые хотят оставаться поверх других приложений.

Поскольку полноэкранное приложение - это окно, которое является самым верхним, ОС не может знать, что ваше самое верхнее окно должно быть самым верхним, чем другое самое верхнее окно.

В идеале вы должны найти какой-то способсотрудничество с другим приложением.

Однако вот некоторые приемы, которые вы можете попробовать, которые могут работать в некоторых ситуациях:

  • Возможно, вам придетсяиспользуйте Win32 API напрямую.
  • Не активируйте свое окно с помощью SetActive, просто используйте SetWindowPos с SWP_NOACTIVATE и HWND_TOPMOST, чтобы переместить его вперед без активации.
  • Попробуйтеесли ваше окно отключено, то оно не сможет украсть фокус, что составляет половину проблемы.
  • Возможно, вам придется установить SPI_SETFOREGROUNDLOCKTIMEOUT в SystemParametersInfo на небольшое значение.
  • Возможно, вам придется попробовать для Foregrouи многократно, пока не получите его.

Обратите внимание, что эти уловки не помогут, если другое окно делает то же самое.

Полезная документация здесь:

0 голосов
/ 29 марта 2011

Если Qt является опцией, вы можете попробовать использовать атрибут Qt::WA_ShowWithoutActivating, как предложено в этом вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...