Autor |
Beitrag |
Muellermilchtrinker
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 27.11.10 14:40
Also ich möchte eine DLL in ein Spiel injecten. Diese DLL soll von meinem Programm einen String bekommen und die DLL soll dann immer wenn das Spiel einen neuen Frame zeichnet diesen Text oben mit zeichenen.
Mein Problem ist nun, wie merke ich, dass ein neuer Frame gezeichnet wurde und wie injecte ich die DLL in das Spiel.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Sa 27.11.10 14:58
Ich nehme an, von dem Programm hast du keinen Sourcecode? Dann wird das ganz schön kompliziert und ich bezweifle, dass sowas erlaubt ist.
|
|
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 27.11.10 15:12
Moin!
Sowas ist im Grunde relativ einfach zu machen. Man injeziert allerdings keine DLL oder ähnliches, sondern führt lediglich einen D3D-Hook aus. Wie man das ganze mit anderen APIs macht weiß ich nicht, aber das wird schon mal ein Anhaltspunkt sein:
www.gamedev.net/comm....asp?topic_id=359794
MfG
Zuletzt bearbeitet von j.klugmann am So 28.11.10 13:04, insgesamt 1-mal bearbeitet
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Sa 27.11.10 19:52
Das betrifft sicherlich die Sache mit dem Mitschneiden, wann ein neuer Frame gezeichnet wird. Aber das macht es nicht unbedingt einfach, einen Text im Spiel anzuzeigen. Und ich denke, wenn das ganze nicht extrem viel Leistung nehmen soll, muss das Programm selbst verändert werden. Du kannst ja schlecht ein Fenster darüber legen, wo der Text angezeigt wird. Zumindest kann ich mir nicht vorstellen, dass das geht, ohne die Framerate nicht mindestens zu halbieren.
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: So 28.11.10 12:55
Da hier offensichtlich völlige Unklarheit herrscht, welches Verb zum Substantiv „Injektion“ gehört (jedenfalls weder „injecten“ noch „injektieren“, igitt), erlaube ich mir, es hier zu nennen: „injizieren“ (und übrigens auch nicht „injezieren“).
|
|
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 28.11.10 13:06
Jakob_Ullmann hat folgendes geschrieben : | Das betrifft sicherlich die Sache mit dem Mitschneiden, wann ein neuer Frame gezeichnet wird. Aber das macht es nicht unbedingt einfach, einen Text im Spiel anzuzeigen. Und ich denke, wenn das ganze nicht extrem viel Leistung nehmen soll, muss das Programm selbst verändert werden. Du kannst ja schlecht ein Fenster darüber legen, wo der Text angezeigt wird. Zumindest kann ich mir nicht vorstellen, dass das geht, ohne die Framerate nicht mindestens zu halbieren. |
Nein, es ist durchaus möglich das performant zu regeln.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: So 28.11.10 14:27
uall.cheat-project.com/uallCollection/
wenns es ein OpenGL Spiel ist, dann wglSwapBuffers oder glFinish hooken
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
DonManfred
      
Beiträge: 148
Erhaltene Danke: 2
Windows 7
Delphi XE3 Pro + HTML5Builder
|
Verfasst: Di 30.11.10 14:53
uall@ogc hat folgendes geschrieben : | wenns es ein OpenGL Spiel ist, dann wglSwapBuffers oder glFinish hooken |
Weisst Du zufällig ob Herr der Ringe Online ein OpenGL-Spiel ist? Ich planer eine Anzeige der/des Raids, die an diesem Tage stattfinden als Overlay im Spiel anzuzeigen (um den User drauf hinzuweisen...
Hast du evtl. einen kleinen Beispielcode um einen Text über diesen Hook auf dem "Screen" auszugeben? Ich habe mich mit Hook, 3D usw bisher noch gar nicht befasst und könnte einen hilfreichen Beispielcode gut gebrauchen 
_________________ Gruss Manfred
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Sa 04.12.10 19:21
Ne wieß ich nicht, du kannst dur aber z.B. mal den SourceCode von Mumble anschauen. Die haben da ein Overlay der Namen für DirectX/OpenGL Spiele eingebaut.
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
shorke
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 04.12.10 21:22
Ich weiss nicht welche API HDRO verwendet, aber das kannst du relativ einfach über das Auflisten der geladenen Module herausfinden - oder einfach einen Debugger verwenden.
Sich Mumble anzuschauen ist mit Sicherheit eine gute Idee, wenn du nicht gebannt werden willst.
Falls es auf D3D9 läuft könntest du probieren Present zu hooken, nocheinmal BeginScene und EndScene aufzurufen und deine Sachen zu rendern. Es kann sein, dass du dabei auf das aktuelle Rendertarget, die Renderstates, Blendstates, usw. achten musst.
Schau dir am besten die Basics für beide APIs an.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Sa 04.12.10 21:45
Fraps macht das auch irgendwie, da hat man dann die Frames als Anzeige. Würde mich auch mal interessieren wie sich sowas am einfachsten realisieren lässt.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|