Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 14:35

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Aug 17, 2010 18:58 
Offline
DGL Member

Registriert: Sa Jun 26, 2004 17:13
Beiträge: 1
Hi @ll,

eins vorneweg: ich hoffe einfach mal mit OpenGL geht das, was ich vorhabe. :D

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. :?

mfg, mh166


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Aug 17, 2010 23:06 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Aug 18, 2010 06:54 
Offline
DGL Member
Benutzeravatar

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.

Aber mit Windows selber sollte man das hinkriegen können (in Linux auch), zumindest, wenn man den Informationen aus dem Web glauben kann: http://www.codeproject.com/KB/wtl/transparent.aspx,


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Aug 18, 2010 10:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Aug 18, 2010 10:53 
Offline
DGL Member
Benutzeravatar

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).

Bei anderen Plattformen muss ich passen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Aug 18, 2010 10:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
aber Click-Through funktioniert bei meinem OpenGL-Fenster nicht (habs gerade ausprobiert).

Kann man vielleicht die Maus-Events abfangen und dann an das darunter liegende Fenster weiterleiten?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Aug 18, 2010 11:03 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Aug 18, 2010 11:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Wäre doch eigentlich auch ein Sicherheitsrisiko.

Klar, aber wir reden hier von Windows ;) War ja auch nur so eine Idee.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Aug 18, 2010 17:01 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Aug 18, 2010 18:06 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Aug 20, 2010 14:55 
Offline
DGL Member

Registriert: Mo Aug 31, 2009 13:19
Beiträge: 151
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 ^^


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Aug 23, 2010 17:15 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

Was außerdem noch geht, man kann auf den Windows-Desktop direkt mit der Windows-API zeichnen:
Code:
MyCanvas := TCanvas.Create;
MyCanvas.Handle := GetDC(0);
MyCanvas.Rectangle(0, 0, Screen.Width, Screen.Height);
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.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.013s | 15 Queries | GZIP : On ]