So zeigen Sie Text auf dem Bildschirm ohne ein Fenster mit Python an

9

Das Problem:

Ich muss Text ohne Fenster direkt auf den Bildschirm schreiben. Der Text muss über allen anderen Fenstern und Vollbildanwendungen angezeigt werden und sollte nicht anklickbar oder in irgendeiner Weise interaktiv sein.

Beispiel: Der Text muss keinen transparenten Hintergrund haben, wie im Beispiel gezeigt. Ich kann entweder Python 2 oder 3 unter Windows 7 verwenden.

Mein Versuch zu einer Lösung:

Ich habe versucht, ein eigenständiges Label mit Tkinter zu erstellen:

Bearbeiten: Verbessert mit Hilfe von Christian Rapp

%Vor%

Was funktioniert:

  • Der Text wird ohne ein Fenster
  • angezeigt
  • Der Text bleibt über allen anderen Fenstern
  • Der Hintergrund kann transparent sein

Was nicht:

  • Der Text zeigt nicht über den Vollbildanwendungen
  • Der Text blockiert Klickereignisse, die darüber auftreten
  • Hintergrundtransparenz ist kein Alpha, also gibt es harte Kanten
dln385 17.02.2014, 22:01
quelle

1 Antwort

11

Es stellt sich heraus, dass es hier zwei völlig unterschiedliche Probleme gibt. Um Text über Fenster anzuzeigen, müssen Sie ein undekoriertes oberstes Fenster erstellen und den Hintergrund mit Chroma Key vergleichen. Dies funktioniert jedoch nicht, wenn eine Vollbildanwendung ausgeführt wird (z. B. ein Spiel). Die einzige zuverlässige Möglichkeit, Text über eine Vollbildanwendung anzuzeigen, ist die Verwendung eines Direct3D-Hooks.

Ich habe kein Direct3D-Hook-Beispiel geschrieben, aber ich werde dem ersten Problem zwei verschiedene Lösungen geben.

Lösung 1: Tkinter + pywin32

In diesem Beispiel mache ich die meiste Arbeit mit Tkinter und verwende win32api, um zu verhindern, dass der Text Mausklicks blockiert. Wenn win32api nicht für Sie verfügbar ist, können Sie diesen Teil des Codes einfach entfernen.

%Vor%

Lösung 2: pywin32

Dieses Beispiel macht alles durch pywin32. Dies macht es komplizierter und weniger portabel, aber wesentlich leistungsfähiger. Ich habe im gesamten Code Links zu den relevanten Teilen der Windows-API eingefügt.

%Vor%     
dln385 28.02.2014, 21:03
quelle