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: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,direct3d9,dxtypes,directdraw,d3dx9,madcodehook;
type TForm1 = class(TForm) private public end;
var Form1: TForm1; direct3dcreate9next : function (sdkversion : dword ) : dword; stdcall = nil; createdevice9next : function (self, adapter, devtype, wnd, flags, params, device: pointer) : dword; stdcall = nil; presentnext : function (self: pointer; const sourcerect, destrect : prect; const destwindowoverride : hwnd; dirtyregion : prgndata) : hresult; stdcall = nil; font : id3dxfont; mycolor : td3dcolor;
implementation
{$R *.dfm} function getinterfacemethod(const intf; methodindex: dword) : pointer; begin result := pointer(pointer(dword(pointer(intf)^) + methodindex * 4)^); end;
procedure showtext(x,y: integer; s: string; col: td3dcolor); var rect : Prect; begin rect.top := y+100; rect.left := x+100; rect.bottom := y+100; rect.right := x+100; if @font <> nil then font.drawtexta(nil,pchar(s),length(s),rect,dt_noclip,mycolor); end;
function presentcallback(self : pointer; const sourcerect, destrect : prect; const destwindowoverride : hwnd; dirtyregion : prgndata) : hresult; stdcall; var test : hwnd; begin showtext(100,100,'test',mycolor); result := presentnext(self,sourcerect,destrect,destwindowoverride,dirtyregion);
end;
function createdevice9callback(self, adapter, devtype, wnd, flags, params, device: pointer) : dword; stdcall; begin font := nil; result := createdevice9next(self, adapter, devtype, wnd, flags, params, device); if font = nil then begin d3dxcreatefont(idirect3ddevice9(device^), 20, 20, 0, 1, false, ansi_charset, out_default_precis, default_quality, default_pitch, 'Arial', font); mycolor := d3dcolor_rgba(255,0,0,255); font.preloadcharacters(0,255); end; if result = 0 then begin if @presentnext = nil then begin hookcode(getinterfacemethod(device^, 17), @presentcallback, @presentnext) end else renewhook(@presentnext); end; end;
function direct3dcreate9callback(sdkversion: dword) : dword; stdcall; begin font := nil; result := direct3dcreate9next(sdkversion); if result <> 0 then if @createdevice9next = nil then hookcode(getinterfacemethod(result, 16), @createdevice9callback, @createdevice9next) else renewhook(@createdevice9next); end;
function hookdirect3d9 : boolean; begin result := hookapi('d3d9.dll', 'Direct3DCreate9', @direct3dcreate9callback, @direct3dcreate9next); end;
begin hookdirect3d9; end. |