eins vorneweg: ich hoffe einfach mal mit OpenGL geht das, was ich vorhabe.
Uuuund zwar: ich wollte gern eine Art Overlay machen, in dem ich diverse Statusinfos etc. auf dem Bildschirm darstellen kann. Diese sollen immer eingeblendet sein; so halbtransparent also, dass man die darunterliegenden Fenster noch gut erkennen kann. Und genau hier liegt mein Problem: die Fenster sollen trotzdem bedienbar bleiben. Nehm ich also jetzt einfach nur n Delphifenster, setz das Transparent und AlwasOnTop, dann wirds murks: bei jedem klick erhält meine Anwendung den Fokus und die Klicks - nicht das darunterliegende Fenster.
Daher der Gedanke an OpenGL: einfach was auf den Bildschirm zeichnen, was dann wie eine Art OnScreenDisplay zwar sichtbar ist, aber trotzdem nicht die Interaktion mit den darunterliegenden Anwendungen verhindert.
Darum jetzt meine Frage: geht das so wie ich mir das vorstelle? Wenn ja, wie?
Hab auch schon mal hier im Forum gesucht, aber irgendwie nix passendes gefunden. Ich hoffe einfach mal, ich hab nix übersehen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie du schon anmerkst wird sowas schwirig. Auch OpenGL Anwendungen brauchen einen Rendercontext und der hängt üblicherweise an einem Fenster und das wäre dann wieder im Vordergrund. Eine Möglichkeit wäre, einen Screenshot zu machen und den dann zu rendern, allerdings ist sowas nicht wirklich prall wenn du im sekundentakt z.B. die Prozessorleistung rendern wölltest. Ich weiß jetzt auch nicht, ob du dir direkt den RC des Desktops holen kannst um darauf zu zeichnen... Wobei das nix nützt, wenn andere Programme geöffnet sind.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Mit OpenGl lässt sich so etwas nicht machen. Ein OpenGL-Fenster kriegt man nur undurchsichtig hin, ist lange Erfahrung nicht nur von mir sondern das kann Dir sicher jeder hier bestätigen.
Ein OpenGL-Fenster kriegt man nur undurchsichtig hin, ist lange Erfahrung nicht nur von mir sondern das kann Dir sicher jeder hier bestätigen.
Bist du dir da sicher? Ich hab immer gedacht das würde gehen. Zumindest das Qt-Framework hat überall in seinem QGLWidget diese Overlay-Funktionen: http://doc.qt.nokia.com/4.6/qglwidget.html#overlays Habe diese aber nie benutzt, gut möglich das die unter "Overlay" irgendetwas anderes verstehen. In jedem Fall ist es wohl vom Betriebssystem abhängig ob Overlays unterstützt werden, siehe http://doc.qt.nokia.com/4.6/qglformat.h ... GLOverlays
Edit: Andererseits ist ein durchklickbares Fenster ein massives Sicherheitsrisiko. Man könnte dem Nutzer irgendeinen harmlosen Dialog zeigen während er in Wahrheit im Hintergrund irgendwelche Systemeinstellungen verstellt. Wäre also kein Wunder wenn das nicht geht.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hmm, wenn Du mich so fragst: Der Threadstarter benutzt Delphi => also habe ich mich mal auf reines Windows beschränkt. Hier bei mir in XP SP2 gehts mit OpenGL nicht. Ich denke, ich bin ziemlich auf der sicheren Seite, wenn ich jetzt tippe: in Vista und Windows7 gehts auch nicht. Aber Windows selber (ohne OpenGL) kann das schon. Dh. Qt4 mit Windows müsste das schon zusammenbringen.
Etwas anderes wäre Linux.
Der Linux-Gnome-Desktop kann definitiv durchsichtige OpenGL-Fenster (auch "wobbelnde" Fenster, wobei das aber reine Spielerei ist), aber Click-Through funktioniert bei meinem OpenGL-Fenster nicht (habs gerade ausprobiert).
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Meine Maus-Events an ein anderes Fenster leiten? Bei einer fremden Applikation wüsste ich nicht, wie ich das machen sollte. Wäre doch eigentlich auch ein Sicherheitsrisiko.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das geht denk ich schon. Achtung - Fantasie involviert! Bei Windows gibts ja diese Eventqueue. Jedes Event was erzeugt wird, wird einem Fenster zugeordnet und in dessen Eventqueue geschrieben. Wenn man das Handle des Fremden Programmes kennt, aknn man vielleicht auch das ding weiterreichen.
Wobei ich das, wie gesagt, gerade nur zusammenphantasiere. Obs wirklich so geht, weiß ich nicht.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja genau sowas geht. Man kann Events an fremde Fenster posten. Viel spaßiger ist aber, herauszufinden, welches Fenster unter dem eigenen liegt.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Den Handle der Anwendung zu kriegen ist doch dann kein Problem, wenn man die Anwendung aus dem eigenen Programm heraus gestartet hat, oder? Zumindest hab ich mir zu meinen VB Zeiten so mal ein (sehr primitives) Programm geschrieben, dass Diablo II starten und mich einloggen konnte (nein, nicht mehr - bevor mir jemand vorwirft, Bots zu schreiben).
Zur Not...kann man nicht sobald ein Mausklick erfolgt einfach das Programmfenster "wegschieben", den Klick dahin simulieren, wo er erfolgt ist und danach das Fenster wieder dahinpacken, wo es vorher war? Das sollte doch alles so schnell gehen, dass der Benutzer das nicht merkt...
Allerdings ergibt das hier alles langsam aber sicher ne Anleitung für Dinge, mit denen man böse Sachen machen kann ^^
Das zeichnet z.B. ein Rechteck über den ganzen Desktop. Der Hauptnachteil an der Sache ist, dass ein Zeichenbefehl einer anderen Anwendung das Rechteck sofort kaputtmacht, also wird es immer etwas flimmern, sobald sich dein Hintergrund ändert. Von diesem DC kann man aber leider keinen OpenGL-RenderingContext erzeugen.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.