ERLEDIGT
NEIN
NEIN
ANTWORTEN
13
13
ZUGRIFFE
744
744
EMPFEHLEN
-
29.08.10 10:19 #1
- Registriert seit
- Apr 2007
- Beiträge
- 35
Hi,
ich bräuchte mal ehrlich hilfe von Profis hier!
Ich habe diesen Hook hier:
Hier Klicken! runtergeladen und gehofft er funktioniert einwandfrei, und siehe da!
Es geht!!
Endlich ein Overlay Hook der funktioniert.
Natürlich wärs mir lieber wenns im VB.net oder C# gewesen wäre, aber was solls ich versuch hiermit mein Glück.
Nun wollte ich wissen, wie ich es schaffe anstatt einer weißen kleinen Box ein Text anzeigen lasse?
Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
INT DrawText( LPD3DXSPRITE pSprite, LPCTSTR pString, int Count, LPRECT pRect, DWORD Format, D3DCOLOR Color ); HRESULT WINAPI D3DXCreateFont( LPDIRECT3DDEVICE9 pDevice, unsigned int Height, unsigned int Width, unsigned int Weight, unsigned int MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT *ppFont ); HRESULT hr; HRESULT (APIENTRY *pfnEndScene)( IDirect3DDevice9 *pDevice ); HRESULT APIENTRY hook_EndScene( IDirect3DDevice9 *pDevice ){ ID3DXFont *g_font=NULL; const char *fps_string; RECT font_rect; fps_string= "test"; SetRect(&font_rect,0,0,20,20); D3DRECT rec = { 0, 0, 20, 20 }; //pDevice->Clear(1, &rec, D3DCLEAR_TARGET, 0, 0, 0); hr=D3DXCreateFont(pDevice, //D3D Device 22, //Font height 0, //Font width FW_NORMAL, //Font Weight 1, //MipLevels false, //Italic DEFAULT_CHARSET, //CharSet OUT_DEFAULT_PRECIS, //OutputPrecision ANTIALIASED_QUALITY, //Quality DEFAULT_PITCH|FF_DONTCARE,//PitchAndFamily "Arial", //pFacename, &g_font); //ppFont g_font->DrawText(NULL, //pSprite fps_string, //pString -1, //Count &font_rect, //pRect DT_LEFT|DT_NOCLIP,//Format, 0xFFFFFFFF); pDevice->Clear(1, &rec, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255,255, 0, 255), 0, 0); return pfnEndScene(pDevice); }
Kann mir jemand helfen? Ich bitte um anständige Posts, habe es in anderen Foren probiert und wurde beschimpft ich soll C++ lernen....
Ich habe VB.Net so gelernt und nun bin ich an C++ dran.
Gruß
Dennis
-
So..
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
class CDX9DrawUtils { private: bool bInit; ID3DXFont* m_pFont; public: void init(IDirect3DDevice9* pDevice) { if(!bInit) { D3DXCreateFont(pDevice, 15, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &m_pFont); bInit = true; } } void drawText(int x, int y, int red, int green, int blue, int alpha, const char *text,...) { D3DCOLOR fontColor = D3DCOLOR_ARGB(alpha, red, green, blue); RECT rct; rct.left=x; rct.top=y; rct.right=rct.left+350; rct.bottom=rct.top+350; va_list va_alist; char logbuf[100] = {0}; va_start(va_alist, text); _vsnprintf(logbuf+strlen(logbuf), sizeof(logbuf) - strlen(logbuf), text, va_alist); va_end(va_alist); m_pFont->DrawText(NULL, logbuf, -1, &rct, 0, fontColor); } }; CDX9DrawUtils DX9DrawUtils; HRESULT APIENTRY hook_EndScene(IDirect3DDevice9 *pDevice){ int myNumber = 10; float myFloat = 10.5f; string myString = "Hello bla string"; DX9DrawUtils.init(pDevice); DX9DrawUtils.drawText(100, 200, 255, 0, 0, 255, "Hallo Welt"); DX9DrawUtils.drawText(100, 200, 255, 0, 0, 255, "MyNumber %i", myNumber); DX9DrawUtils.drawText(100, 200, 255, 0, 0, 255, "MyFloat %f", myFloat); DX9DrawUtils.drawText(100, 200, 255, 0, 0, 255, "MyFloat %s", myString.c_str()); //du kannst auch alles in verbindung benutzen.. , "%s%i\n%f.2, myString.c_str(), myNumber, myFloat); die .2 begrenzen die float nachkomma stellen auf 2.. das \n steht natürlich für newline return pfnEndScene(pDevice); //return zum codecave wo die überschriebenen bytes stehen (funktionsprolog) und ein jump zurück zum orginalcode }Geändert von MedRamBO (29.08.10 um 16:38 Uhr)
-
30.08.10 17:27 #3
- Registriert seit
- Apr 2007
- Beiträge
- 35
Super! Echt klasse, habe schon aufgeben wollen... Endlich eine Person hier auf der Welt wo großzügig ist und mir helfen kann.
Super danke!
Ich habe nur ein Problem. Im Spiel wird nichts angezeigt. Vorher mit dem Standart weißen Quadrat gings, mit deinem Code passiert nichts. Der Compiler muckt auch rum wegen dieser Zeile:
" _vsnprintf(logbuf+strlen(logbuf), sizeof(logbuf) - strlen(logbuf), text, va_alist);"
Dann gibt es noch einen fehler mit string, da wird mir string roter unterstrichen (Nutze Visual Studio)
Habe gegoogelt wie man normal strings definiert, und deins ist aber richtig, keine ahnung was visual studio für probleme hat....
Aber super eh!! Danke!
-
Stell mal in den Projekteinstellungen "Charackterset" von Unicode auf Multibyte. Vielleicht ist es das. Bin mir nicht sicher.
Ich benutze den code genau so wie er ist. Das kommt aus dem DrawSDK was ich mir damals für meinen ingame irc client geschrieben hab.
-
30.08.10 18:57 #5
- Registriert seit
- Apr 2007
- Beiträge
- 35
Zeichensatz: Multibyte-Zeichensatz verwenden
Ist schon drinnen!
Hier ist der Quellcode von der main.cpp:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#include <windows.h> #include <d3dx9.h> #include <d3d9.h> #include "../../include/dx9hook.h" #include "../../include/dx9table.h" class CDX9DrawUtils { private: bool bInit; ID3DXFont* m_pFont; public: void init(IDirect3DDevice9* pDevice) { if(!bInit) { D3DXCreateFont(pDevice, 15, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &m_pFont); bInit = true; } } void drawText(int x, int y, int red, int green, int blue, int alpha, const char *text,...) { D3DCOLOR fontColor = D3DCOLOR_ARGB(alpha, red, green, blue); RECT rct; rct.left=x; rct.top=y; rct.right=rct.left+350; rct.bottom=rct.top+350; va_list va_alist; char logbuf[100] = {0}; va_start(va_alist, text); _vsnprintf(logbuf+strlen(logbuf), sizeof(logbuf) - strlen(logbuf), text, va_alist); va_end(va_alist); m_pFont->DrawText(NULL, logbuf, -1, &rct, 0, fontColor); } }; CDX9DrawUtils DX9DrawUtils; HRESULT (APIENTRY *pfnEndScene)( IDirect3DDevice9 *pDevice ); HRESULT APIENTRY hook_EndScene(IDirect3DDevice9 *pDevice){ int myNumber = 10; float myFloat = 10.5f; //string myString = "Hello bla string"; DX9DrawUtils.init(pDevice); DX9DrawUtils.drawText(100, 200, 255, 0, 0, 255, "Hallo Welt"); DX9DrawUtils.drawText(100, 200, 255, 0, 0, 255, "MyNumber %i", myNumber); DX9DrawUtils.drawText(100, 200, 255, 0, 0, 255, "MyFloat %f", myFloat); //DX9DrawUtils.drawText(100, 200, 255, 0, 0, 255, "MyFloat %s", myString.c_str()); //du kannst auch alles in verbindung benutzen.. , "%s%i\n%f.2, myString.c_str(), myNumber, myFloat); die .2 begrenzen die float nachkomma stellen auf 2.. das \n steht natürlich für newline return pfnEndScene(pDevice); //return zum codecave wo die überschriebenen bytes stehen (funktionsprolog) und ein jump zurück zum orginalcode } BOOL APIENTRY DllMain( HMODULE hInstance, DWORD dwReason, LPVOID lpReserved ) { switch(dwReason) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls((HMODULE)hInstance); if(!DirectX9Detour(DX9_ENDSCENE, (FARPROC)&hook_EndScene, (FARPROC)&pfnEndScene)) { MessageBoxA(HWND_DESKTOP, "DirectX9Detour failed.", "DirectX9Detour", MB_ICONERROR); return FALSE; } break; case DLL_PROCESS_DETACH: DirectX9Cleanup(); break; } return TRUE; }
//EDIT: Komplette Source mal hinzugefügt: http://rumstein.de/DirectX9Hook.zipGeändert von Bulldozer1930 (31.08.10 um 22:25 Uhr) Grund: Quellcode hinzugefügt!
-
Hellö Welt xP
Stehe seit zwei Tagen vor genau dem selbem Problem.
Der Hook funktioniert. Clear oder ColorFill funktionieren einwandfrei.
Die DrawText lasse ich per Tastendruck ausgeführen.
Resultat: Ein kurzes Aufblinken des Textes und dann verschwinden alle vorher, per Clear oder ColorFill, erstellen Flächen, inklusive des Textes.
@Bulldozer1930:
Hast du inzwischen eine Lösung gefunden?
Habe so ziemlich alles abgegrast, was google mdsn und co dazu ausgespuckt haben. Ohne Erfolg.
Gibt es generell Probleme mit Hooks und DrawText?
Bin langsam am Verzweilfen, aber noch hat mit der Ergeiz fest im Griff. (x_X)
Also wenn da draußen mir irgendwer weiter helfen kann, platz ich wahrscheinlich vor Freude
(*push*)
-
Gibts inzwischen eine Lösung für eine funktionierende DrawText Methode ? Bastel da jetzt nun schon seit 4 Tagen rum .. :P
Lebe und denke nicht an Morgen.
-
ja gibt es

ich werd nachher/heut abend mal bissl source posten.
bis denn
-
Wärstn Schatz... :P
Könntest dann auch das ein oder andere erklären ?
Nur Source is ja C&C
und lernen will ich was :P!
Lebe und denke nicht an Morgen.
-
heyho,
hab vorhin mal mein hook getest... läuft nich mehr -.-
is auch schon ein weilchen her
hier aber ein link zu einem funtionierendem hook
hier soll ein crosshair nachträglich gerendert werden, was bei mir nicht geklappt hat...
hab die khEndScene um folgende zeilen erweitert um ein kleines weißes rechteck bei pos 0x0 einzufügen und siehe da, es geht
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
HRESULT WINAPI hkEndScene(LPDIRECT3DDEVICE9 pDevice) { myfile << "EndScene is hooked\n"; //Check log while(!npDevice) { npDevice = pDevice; //Here we store pDevice so we can re-hook with a VTable hook later. } /*if(g_pFont == NULL) D3DXCreateFontA(pDevice, 15, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Verdana", &g_pFont); //Create fonts if(g_pLine == NULL) D3DXCreateLine(pDevice, &g_pLine); //Create lines pDevice->GetViewport(&g_ViewPort); if(GetAsyncKeyState(VK_DECIMAL)&1) { bXHair=!bXHair; bChams=!bChams; } if( bXHair ){DrawXHair(pDevice,D3DCOLOR_XRGB( 255, 0, 0 ) );}*/ IDirect3DSurface9 *test; pDevice->GetRenderTarget(0, &test); D3DRECT rec = {0, 0, 10, 10}; pDevice->Clear(1, &rec, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 0, 0); return oEndScene(pDevice); }
Um die dll zu injecten brauchst du noch Winject oder du nimmst die injector.cpp aus bulldozer post und passt sie dir an. Link (im DirectX9Hook.rar)
wie das ganze funktioniert, kann ich dir auch nur theoretisch erklären, da ich auch eher neuling bin. ein kleines tutoruial dazu
hier gehts zwar um game hacks aber es behandelt auch das hooken des directxdevices. weiß ja nich wozu du das ganze benutzten willst. cheaten is ********
aber ich werd hier mal nix unterstellen 
zum groben ablauf:- wenn prozess xyz.exe gestartet ist wird während der runtime deine dll injected
- deine dll hängt sich an die endscene funktion vom directxdevice (pDevice; pointer aufs DIRECT3DDEVICE9) bzw. leitet sie an die khEndScene in der du alle möglichen sachen rendern, texturen austauschen etc kannst
- das von die geänderte directxdevice wird an die eigentliche EndScene zurück returnt womit dann deine änderungen gerendert werden
hoffe, du kannst damit erstmal was anfangen... bei fragen, fragen
-
Soweit war ich schon.. :P
Ich bekommst nich auffa reihe mit dem DirectX DrawText oder mit der Anzeige von Images.. :/.. komplizierter mist.. einzelne kleine boxen ****en.. farbe größe etc. wunderbar anpassbar.. aber bei drawtext ist fü rmich alles logisch und sinngemäß geschrieben jedoch bringts mein spiel zum abschmieren.. :/Lebe und denke nicht an Morgen.
-
um welches speitl gehts?
bei mir reichen für beispielsweise portal folgende drei zeilen
Code :1 2 3
if(g_pFont == NULL) D3DXCreateFontA(pDevice, 15, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Verdana", &g_pFont); RECT rec = {13, 10, 160, 30}; g_pFont->DrawText(NULL, "Test", -1, &rec, 0, D3DCOLOR_ARGB(255, 255, 0, 0) );
g_pFont:
Code :1
LPD3DXFONT g_pFont = NULL;
gibts irgendein error report oder ähnliches?
-
GTA San Andreas...
hast du ICQ oder MSN, Skype oder einen anderen IM ? :P Wäre mal nett sich direkt zu unterhalten
!
// Report:
Das Fenster von GTA verkleinert sich beim Start auch mit deinem Code.. und es wird nur das Intro abgespielt danach stürzt das Spiel ab (Windows beendet von selbst das game - Problembericht)Geändert von Radanua (06.08.11 um 03:40 Uhr)
Lebe und denke nicht an Morgen.
-
icq per pm
Ähnliche Themen
-
DirectX9
Von the edge im Forum C/C++Antworten: 5Letzter Beitrag: 23.08.05, 07:38 -
Frage zu DirectX9
Von the edge im Forum C/C++Antworten: 4Letzter Beitrag: 04.04.05, 18:11 -
max5.1 sp1 + directx9
Von El_Schubi im Forum 3D Studio MaxAntworten: 3Letzter Beitrag: 25.05.03, 23:24 -
Directx9.0 vernichten?
Von Iwein im Forum Microsoft WindowsAntworten: 7Letzter Beitrag: 06.05.03, 13:14 -
[VC++] Hook, oder nicht Hook?
Von METATR0N im Forum C/C++Antworten: 0Letzter Beitrag: 23.07.02, 16:22





Zitieren
Login





