⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directx9hook.pas.svn-base

📁 这是一段游戏修改工具的源代码.ring3功能由dephi开发,驱动是C开发.希望对大家有帮助
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
unit directx9hook;interfaceuses classes,windows,messages,forms,dialogs,sysutils,direct3d9,d3dx9,math,graphics,keylistener;type TTextureInfo = record  //creation parameters  Width, Height, Levels : Cardinal;  Usage : LongWord;  Format : TD3DFormat;  Pool : TD3DPool;  locked: boolean;  texturehandle: IDirect3DTexture9;  xdelta,ydelta,zdelta: single;end;type PIDirect3D9=^IDirect3D9;type TDirect3DCreate9=function(SDKVersion: DWORD): PIDirect3D9; stdcall;type TIDirect3D9_CreateDevice_Original=function(const self: IDirect3D9; const Adapter : Cardinal; const DeviceType : TD3DDevType; FocusWindow : HWND; BehaviorFlags : LongWord; var PresentationParameters : TD3DPresentParameters; out ReturnedDeviceInterface : IDirect3DDevice9) : HResult; stdcall;type TIDirect3DDevice9_Reset_Original=function(const self: IDirect3DDevice9 ;var PresentationParameters : TD3DPresentParameters) : HResult; stdcall;type TIDirect3DDevice9_CreateTexture_Original=function(const self: IDirect3DDevice9 ;const Width, Height, Levels : Cardinal; const Usage : LongWord; Format : TD3DFormat; Pool : TD3DPool; out Texture : IDirect3DTexture9; SharedHandle : PHandle) : HResult; stdcall;type TIDirect3DDevice9_BeginScene_Original=function(const self: IDirect3DDevice9): HResult; stdcall;type TIDirect3DDevice9_EndScene_Original=function(const self: IDirect3DDevice9): HResult; stdcall;type TIDirect3DDevice9_SetTransform_Original=function(const self: IDirect3DDevice9; State : TD3DTransformStateType; const Matrix : TD3DMatrix) : HResult; stdcall;type TIDirect3DDevice9_GetTransform_Original=function(const self: IDirect3DDevice9; State : TD3DTransformStateType; out Matrix : TD3DMatrix) : HResult; stdcall;type TIDirect3DDevice9_SetRenderState_Original=function(const self: IDirect3DDevice9; State : TD3DRenderStateType; const Value : LongWord) : HResult; stdcall;type TIDirect3DDevice9_SetTexture_Original=function(const self: IDirect3DDevice9; const Stage : LongWord; Texture : IDirect3DBaseTexture9) : HResult; stdcall;type TIDirect3DDevice9_DrawPrimitive_Original=function(const self: IDirect3DDevice9;PrimitiveType : TD3DPrimitiveType; const StartVertex, PrimitiveCount : Cardinal) : HResult; stdcall;type TIDirect3DDevice9_DrawIndexedPrimitive_Original=function(const self: IDirect3DDevice9;_Type : TD3DPrimitiveType; const BaseVertexIndex : Integer; const MinVertexIndex, NumVertices, StartIndex, PrimCount : Cardinal) : HResult; stdcall;type TIDirect3DDevice9_DrawPrimitiveUP_Original=function(const self: IDirect3DDevice9;PrimitiveType : TD3DPrimitiveType; const PrimitiveCount : Cardinal; VertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;type TIDirect3DDevice9_DrawIndexedPrimitiveUP_Original=function(const self: IDirect3DDevice9;PrimitiveType : TD3DPrimitiveType; const MinVertexIndex, NumVertices, PrimitiveCount : Cardinal; IndexData : Pointer; IndexDataFormat : TD3DFormat; VertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;type TIDirect3DTexture9_Release_Original=function(const self: IDirect3DTexture9): integer; stdcall;var Direct3DCreate9:TDirect3DCreate9;    Direct3DCreate9Info: TAPIInfo;    IDirect3D9_CreateDevice:TAPIInfo;    //IDirect3DDevice8 method hooks    IDirect3DDevice9_Reset: TApiInfo;    IDirect3DDevice9_CreateTexture: TApiInfo;    IDirect3DDevice9_BeginScene: TApiInfo;    IDirect3DDevice9_EndScene: TApiInfo;    IDirect3DDevice9_SetTransform: TApiInfo;    IDirect3DDevice9_GetTransform: TApiInfo;    IDirect3DDevice9_SetRenderState: TApiInfo;    IDirect3DDevice9_SetTexture: TAPIInfo;    IDirect3DDevice9_DrawPrimitive: TAPIInfo;    IDirect3DDevice9_DrawIndexedPrimitive: TAPIInfo;    IDirect3DDevice9_DrawPrimitiveUP:TAPIInfo;    IDirect3DDevice9_DrawIndexedPrimitiveUP: TApiinfo;    IDirect3DTexture9_Release: TAPIInfo;    d3d9dll: THandle;procedure handlekeypresses;procedure LoadLockedTextureInfo9(aimconfigfile:string);procedure SaveLockedTextureInfo9(aimconfigfile: string);procedure SaveAllTextures9;function Direct3DCreate9Hook(SDKVersion: DWORD): PIDirect3D9; stdcall;function IDirect3D9_CreateDevice_Hook(const self: IDirect3D9; const Adapter : Cardinal; const DeviceType : TD3DDevType; FocusWindow : HWND; BehaviorFlags : LongWord; var PresentationParameters : TD3DPresentParameters; out ReturnedDeviceInterface : IDirect3DDevice9) : HResult; stdcall;function IDirect3DDevice9_Reset_Hook(const self: IDirect3DDevice9 ;var PresentationParameters : TD3DPresentParameters) : HResult; stdcall;function IDirect3DDevice9_CreateTexture_Hook(const self: IDirect3DDevice9 ;const Width, Height, Levels : Cardinal; const Usage : LongWord; Format : TD3DFormat; Pool : TD3DPool; out Texture : IDirect3DTexture9; SharedHandle : PHandle) : HResult; stdcall;function IDirect3DDevice9_BeginScene_Hook(const self: IDirect3DDevice9): HResult; stdcall;function IDirect3DDevice9_EndScene_Hook(const self: IDirect3DDevice9): HResult; stdcall;function IDirect3DDevice9_SetTransform_Hook(const self: IDirect3DDevice9; State : TD3DTransformStateType; const Matrix : TD3DMatrix) : HResult; stdcall;function IDirect3DDevice9_GetTransform_Hook(const self: IDirect3DDevice9; State : TD3DTransformStateType; out Matrix : TD3DMatrix) : HResult; stdcall;function IDirect3DDevice9_SetRenderState_Hook(const self: IDirect3DDevice9; State : TD3DRenderStateType; const Value : LongWord) : HResult; stdcall;function IDirect3DDevice9_SetTexture_Hook(const self: IDirect3DDevice9; const Stage : LongWord; Texture : IDirect3DBaseTexture9) : HResult; stdcall;function IDirect3DDevice9_DrawPrimitive_Hook(const self: IDirect3DDevice9;PrimitiveType : TD3DPrimitiveType; const StartVertex, PrimitiveCount : Cardinal) : HResult; stdcall;function IDirect3DDevice9_DrawIndexedPrimitive_Hook(const self: IDirect3DDevice9;_Type : TD3DPrimitiveType; const BaseVertexIndex : Integer; const MinVertexIndex, NumVertices, StartIndex, PrimCount : Cardinal) : HResult; stdcall;function IDirect3DDevice9_DrawPrimitiveUP_Hook(const self: IDirect3DDevice9;PrimitiveType : TD3DPrimitiveType; const PrimitiveCount : Cardinal; VertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;function IDirect3DDevice9_DrawIndexedPrimitiveUP_Hook(const self: IDirect3DDevice9;PrimitiveType : TD3DPrimitiveType; const MinVertexIndex, NumVertices, PrimitiveCount : Cardinal; IndexData : Pointer; IndexDataFormat : TD3DFormat; VertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;function IDirect3DTexture9_Release_Hook(const self: IDirect3DTexture9): integer; stdcall;var //variables for the directx9 hook    cefont: ID3dXFont;    mysprite: ID3DXSprite;    myspritetexture: IDirect3DTexture9;    targettexture: IDirect3DTexture9;    locktexture: IDirect3DTexture9;    movementtexture: IDirect3DTexture9;    lockedstringtexture: IDirect3dTexture9;    unlockedStringTexture: IDirect3dTexture9;    textureStringTexture: IDirect3DTexture9;    blacktexture: IDirect3DTexture9;    dontsetlastviewmatrix:  boolean;    dontsetlastworldmatrix: boolean;    dontsetlastprojectionmatrix: boolean;    lastviewmatrix:  TD3DMatrix;    lastworldmatrix: TD3DMatrix;    lastprojectionmatrix:  TD3DMatrix;    lastprojectionmatrix2: TD3DMatrix;    viewmatrixset:  boolean;    worldmatrixset: boolean;    projectionmatrixset: boolean;    lockedtexturelist: array of TTextureInfo;    texturelist: array of TTextureInfo;    xylist: array of td3dxvector3;    oldpos: td3dxvector3;    newtick: int64;    tickssincelastdraw: dword;    mssincelastdraw: double;    watchfornextdraw: boolean;    CurrentTexture: integer;    nextdrawstage: dword;    resetdevice: boolean;implementationprocedure SaveAllTextures9;var i: integer;begin  for i:=0 to length(texturelist)-1 do    D3DXSaveTextureToFile(pchar('CETEX'+IntToStr(i)+'.bmp'),D3DXIFF_BMP,texturelist[i].texturehandle,nil);end;procedure handlekeypresses;var found: boolean;    i,j: integer;begin  if keys.callibrationmode then  begin    try      if checkkeycombo(keys.previoustexture) then if (texturepointer-1)<0 then texturepointer:=length(texturelist)-1 else dec(texturepointer);      if checkkeycombo(keys.nexttexture) then if (texturepointer+1)>=length(texturelist) then texturepointer:=0 else inc(texturepointer);      if checkkeycombo(keys.locktexture) then  //(un)lock      begin        found:=false;        for i:=0 to length(lockedtexturelist)-1 do        begin          if dword(lockedtexturelist[i].texturehandle)=dword(texturelist[texturepointer].texturehandle) then          begin            j:=i;            found:=true;            break;          end;        end;        if found then        begin          lockedtexturelist[i].texturehandle._Release;          for i:=j to length(lockedtexturelist)-2 do          begin            lockedtexturelist[i].Width:=lockedtexturelist[i+1].Width;            lockedtexturelist[i].Height:=lockedtexturelist[i+1].Height;            lockedtexturelist[i].Levels:=lockedtexturelist[i+1].Levels;            lockedtexturelist[i].Usage:=lockedtexturelist[i+1].Usage;            lockedtexturelist[i].Format:=lockedtexturelist[i+1].Format;            lockedtexturelist[i].Pool:=lockedtexturelist[i+1].Pool;            lockedtexturelist[i].locked:=lockedtexturelist[i+1].locked;            lockedtexturelist[i].xdelta:=lockedtexturelist[i+1].xdelta;            lockedtexturelist[i].ydelta:=lockedtexturelist[i+1].ydelta;            lockedtexturelist[i].zdelta:=lockedtexturelist[i+1].zdelta;            copymemory(@lockedtexturelist[i].texturehandle,@lockedtexturelist[i+1].texturehandle,4);          end;          fillmemory(@lockedtexturelist[length(lockedtexturelist)-1].texturehandle,4,0);          setlength(lockedtexturelist,length(lockedtexturelist)-1);          texturelist[texturepointer].locked:=false;        end        else        begin          i:=length(lockedtexturelist);          setlength(lockedtexturelist,i+1);          lockedtexturelist[i].Width:=texturelist[texturepointer].Width;          lockedtexturelist[i].Height:=texturelist[texturepointer].Height;          lockedtexturelist[i].Levels:=texturelist[texturepointer].Levels;          lockedtexturelist[i].Usage:=texturelist[texturepointer].Usage;          lockedtexturelist[i].Format:=texturelist[texturepointer].Format;          lockedtexturelist[i].Pool:=texturelist[texturepointer].Pool;          lockedtexturelist[i].locked:=texturelist[texturepointer].locked;          lockedtexturelist[i].xdelta:=texturelist[texturepointer].xdelta;          lockedtexturelist[i].ydelta:=texturelist[texturepointer].ydelta;          lockedtexturelist[i].zdelta:=texturelist[texturepointer].zdelta;          copymemory(@lockedtexturelist[i].texturehandle,@texturelist[texturepointer].texturehandle,4);          lockedtexturelist[i].texturehandle._AddRef;          lockedtexturelist[i].locked:=true;          texturelist[texturepointer].locked:=true;        end;      end;      if (texturepointer<>-1) and (texturelist[texturepointer].locked) then      begin        if checkkeycombo(keys.IncreaseX) then          for i:=0 to length(lockedtexturelist)-1 do            if lockedtexturelist[i].texturehandle=texturelist[texturepointer].texturehandle then            begin              lockedtexturelist[i].xdelta:=lockedtexturelist[i].xdelta+1;              texturelist[texturepointer].xdelta:=texturelist[texturepointer].xdelta+1;              break;            end;        if checkkeycombo(keys.Increasey) then          for i:=0 to length(lockedtexturelist)-1 do            if lockedtexturelist[i].texturehandle=texturelist[texturepointer].texturehandle then            begin              lockedtexturelist[i].ydelta:=lockedtexturelist[i].ydelta+1;              texturelist[texturepointer].ydelta:=texturelist[texturepointer].ydelta+1;              break;            end;        if checkkeycombo(keys.Increasez) then          for i:=0 to length(lockedtexturelist)-1 do            if lockedtexturelist[i].texturehandle=texturelist[texturepointer].texturehandle then            begin              lockedtexturelist[i].zdelta:=lockedtexturelist[i].zdelta+1;              texturelist[texturepointer].zdelta:=texturelist[texturepointer].zdelta+1;              break;            end;        if checkkeycombo(keys.DecreaseX) then          for i:=0 to length(lockedtexturelist)-1 do            if lockedtexturelist[i].texturehandle=texturelist[texturepointer].texturehandle then            begin              lockedtexturelist[i].xdelta:=lockedtexturelist[i].xdelta-1;              texturelist[texturepointer].xdelta:=texturelist[texturepointer].xdelta-1;              break;            end;        if checkkeycombo(keys.Decreasey) then          for i:=0 to length(lockedtexturelist)-1 do            if lockedtexturelist[i].texturehandle=texturelist[texturepointer].texturehandle then            begin              lockedtexturelist[i].ydelta:=lockedtexturelist[i].ydelta-1;              texturelist[texturepointer].ydelta:=texturelist[texturepointer].ydelta-1;              break;            end;        if checkkeycombo(keys.Decreasez) then          for i:=0 to length(lockedtexturelist)-1 do            if lockedtexturelist[i].texturehandle=texturelist[texturepointer].texturehandle then            begin              lockedtexturelist[i].zdelta:=lockedtexturelist[i].zdelta-1;              texturelist[texturepointer].zdelta:=texturelist[texturepointer].zdelta-1;              break;            end;      end;    except    end;  end;end;procedure SaveLockedTextureInfo9(aimconfigfile: string);var i,j,k: integer;    tr: TD3DLocked_Rect;    aimsettings: tfilestream;    lr:TD3DLocked_Rect;    bts: array of byte;    s: string;    total: dword;    pdesc: td3dsurface_desc;    bug: boolean;    temp: array of byte;begin  try    aimsettings:=tfilestream.Create((keys.cedir+aimconfigfile+'.cta'),fmCreate);    try      total:=length(lockedtexturelist);      aimsettings.WriteBuffer(total,4);      for i:=0 to length(lockedtexturelist)-1 do      begin        //save the levels        aimsettings.WriteBuffer(lockedtexturelist[i],sizeof(TTextureInfo));        try          if lockedtexturelist[i].texturehandle.LockRect(0,tr,nil,D3DLOCK_NOSYSLOCK)=0 then          begin            try              lockedtexturelist[i].texturehandle.GetLevelDesc(0,pdesc);//              s:='Width='+IntToStr(lockedtexturelist[i].Width)+' Height='+IntToStr(lockedtexturelist[i].Height)+' pitch='+IntToStr(tr.Pitch)+' format='+IntToStr(lockedtexturelist[i].Format)+' levels='+inttostr(lockedtexturelist[i].Levels);              total:=pdesc.width*pdesc.Height; //sigh...              total:=total div 4;              setlength(temp,total);              bug:=true;              while bug do              begin                try                  copymemory(@temp[0],tr.Bits,total);                  bug:=false;                except                  on e: exception do                  begin                    total:=total div 2;                    setlength(temp,total);                    if total=0 then bug:=false; //bah                  end;                end;              end;              aimsettings.WriteBuffer(total,4);              aimsettings.WriteBuffer(temp[0],total);            finally              lockedtexturelist[i].texturehandle.UnlockRect(0);            end;          end;        except          //something went wrong, but try to not screw up          total:=0;          aimsettings.WriteBuffer(total,4);        end;      end;    finally      aimsettings.free;    end;  except end;end;procedure LoadLockedTextureInfo9(aimconfigfile:string);var aimsettings,aimsettings2: tfilestream;    images: array of array of byte;    i,j: integer;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -