Autor Beitrag
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Do 22.02.07 23:54 
Hi!
Ich weiß, das Thema wird wahrscheinlich etwas kniffelig. Aber es interessiert mich doch. Und zwar würde ich gerne für meinen LanChat2 TBX ein Fenster erstellen, dass immer oben bleibt, auch bei Spielen, damit man ständig chatten kann, wenn man will. Mit so einfachen Mitteln, wie FormStyle := fsStayOnTop ist das nicht zu realisieren.
Wie könnte ich so ein Overlay Fenster erstellen?
Dieser Thread gibt Ansatzpunkte (Hooken von DirectX), aber auch an, dass Quellen im Internet existieren. In dem Thread kann ich leider nicht mehr antworten, ich habe jetzt einfach mal ne PN verschickt.
Trotzdem, da es laut SB auch andere zu interessieren scheint, kennt jemand Quellen, woher ich das Wissen bekommen, dieses Overlay zu erstellen, ohne das ganze MSDN durchlesen zu müssen^^?
(oder gibts sowas etwa schon fertig? glaube ich wohl kaum^^)

Gruß
alias5000

Moderiert von user profile iconChristian S.: url-Tag repariert

_________________
Programmers never die, they just GOSUB without RETURN
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1322
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Fr 23.02.07 02:15 
geniale Idee!

ausblenden Delphi-Quelltext
1:
Application.BringToFront()					


Ist leider Momentan das einzige was mir einfällt.
Gesehen habe ich sowas jedenfalls schon. Auch bei directx nutzenden Spielen.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 23.02.07 09:39 
Aber pass auf dabei, dass z.B. Steam es nicht als Cheat erkennt.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Fr 23.02.07 10:10 
Alias: Das Programm worüber qbnut in deinem Link redet ist TeamSpeak Overlay. Die machen etwas anderes als was du da vielleicht denkst. Ja die Hooken Direct3D. Aber die haben kein eigenes Fenster. Die benutzen das gerade aktive Direct3D und rendern selber per Hand ihre Texte. Mehr ist das bei TSO nicht. Vergleichbar mit dem was Fraps macht. Komplexer und eher das was du suchst ist wohl xfire. Meine ich zu mindest. Aber habe es nie probiert. Davon gibt es natürlich keine Quellen.

Ich hatte da auch schon mal nach Quellen gesucht. Konnte so aber keine finden. Etwas was aber in jedem Fall in diese Richtung geht ist auf der Homepage von Michael Puff zu finden. Damit bräuchtest du in OpenGL zu mindest lediglich das SwapBuffers hooken und würdest vor dem Swappen dein eigenes Zeug zeichnen.

Du müsstest diesen Hook allerdings als globalen Hook in eine DLL Packen, da es sonst nicht Anwendungsübergreifen funktionieren würde.

Habe mich aber nach dem Finden des Codes nicht wirklich wesentlich weiter damit beschäftigt. Aber eines weiß ich. Es ist definitiv nicht mal eben so recht einfach gemacht. Hinter dem ganzen Steckt ein richtig gehöriger Aufwand. Vor allem, da du in deinem Messanger ja auch noch interaktion benötigen würdest.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
alias5000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Fr 23.02.07 12:20 
Jap, das merke ich auch grad. Das Application.BringToFront bringt ja sicher nix, das wusste ich schon. Das Spiel darf ja an sich den Fokus nicht verlieren.
Dass das Programm nicht als Cheat entlarvt wird, ist sicher noch eine zusätzliche Hürde.

Schade, ich hab das schon geahnt, dass das sowas kompliziertes ist. Ich schreibe mir die Idee aber weiter auf, Interessant ist sie ja. Werde das weiter verfolgen und mich v.a. dann ein bisschen kräftiger in DirectX/3D einarbeiten müssen^^

Gruß
alias5000

_________________
Programmers never die, they just GOSUB without RETURN
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 23.02.07 12:33 
Eine andere Möglichkeit wäre auch, nur das Zeichen zu hooken (zumindest bei OGL, wie Lossy schon schreibt), unddie Texteingabe über einen globalen Keyboard-Hook zu machen. Beispiel:

Programm "schläft"
Tastenkombination->Overlay anzeigen
Tastenkombination->Eingabe beginnen
Text eingeben, Hook schreibt in Puffer, der als Text gerendert wird
Tastenkombi->Senden
Tastenkombination->Overlay verstecken
Programm "schläft" wieder

Wobei Beginnen und Senden durchaus das gleiche sein könnte, was dann anhand des schon eingegebenen erkannt wird, ob das neu ist oder der 'Senden'-Befehl.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."