📄 directxhook.pas
字号:
unit DirectxHook;
interface
//directx8 hook
uses controls,classes,windows,messages,forms,dialogs,sysutils,directxGraphics,math,graphics,keylistener,d3dx81mo;
type CEVertex=record
position: TD3DVector;
RHW: single;
// color: Dword;
tu,tv: single;
end;
const D3DFVF_CEVertex=(D3DFVF_XYZRHW or {D3DFVF_DIFFUSE or} D3DFVF_TEX1);
type TTextureInfo = record
//creation parameters
Width, Height, Levels : Cardinal;
Usage : LongWord;
Format : TD3DFormat;
Pool : TD3DPool;
locked: boolean;
// checked: boolean;
texturehandle: IDirect3DTexture8;
xdelta,ydelta,zdelta: single;
end;
type PIDirect3D8=^IDirect3D8;
type TDirect3DCreate8=function(SDKVersion: DWORD): PIDirect3D8; stdcall;
type TIDirect3D_CreateDevice_Original=function(const self:IDirect3D8;const Adapter : Cardinal; const DeviceType : TD3DDevType; hFocusWindow : HWND; BehaviorFlags : LongWord; var pPresentationParameters : TD3DPresent_Parameters; out ppReturnedDeviceInterface : IDirect3DDevice8) : HResult; stdcall;
type TIDirect3DDevice8_Reset_Original=function(const self:IDirect3DDevice8; var pPresentationParameters : TD3DPresent_Parameters) : HResult; stdcall;
type TIDirect3DDevice8_CreateTexture_Original=function(const self:IDirect3DDevice8;const Width, Height, Levels : Cardinal; const Usage : LongWord; const Format : TD3DFormat; const Pool : TD3DPool; out ppTexture : IDirect3DTexture8) : HResult; stdcall;
type TIDirect3DDevice8_CreateVertexBuffer_Original=function(const self:IDirect3DDevice8;const Length : Cardinal; const Usage, FVF : LongWord; const Pool : TD3DPool; out ppVertexBuffer : IDirect3DVertexBuffer8) : HResult; stdcall;
type TIDirect3DDevice8_UpdateTexture_Original=function(const self: IDirect3DDevice8; const pSourceTexture, pDestinationTexture : IDirect3DBaseTexture8) : HResult; stdcall;
type TIDirect3DDevice8_BeginScene_Original=function(const self:IDirect3DDevice8): HResult; stdcall;
type TIDirect3DDevice8_EndScene_Original=function(const self:IDirect3DDevice8): HResult; stdcall;
type TIDirect3DDevice8_SetTransform_Original=function(const self: IDirect3DDevice8; const State : TD3DTransformStateType; const pMatrix : TD3DMatrix) : HResult; stdcall;
type TIDirect3DDevice8_GetTransform_Original=function(const self:IDirect3DDevice8;const State : TD3DTransformStateType; out pMatrix : TD3DMatrix) : HResult; stdcall;
type TIDirect3DDevice8_SetRenderState_Original=function(const self:IDirect3DDevice8;const State : TD3DRenderStateType; const Value : LongWord) : HResult; stdcall;
type TIDirect3DDevice8_SetTexture_Original=function(const self:IDirect3DDevice8;const Stage : LongWord; const pTexture : IDirect3DBaseTexture8) : HResult; stdcall;
type TIDirect3DDevice8_DrawPrimitive_Original=function(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const StartVertex, PrimitiveCount : Cardinal) : HResult; stdcall;
type TIDirect3DDevice8_DrawIndexedPrimitive_Original=function(const self: IDirect3DDevice8;const _Type : TD3DPrimitiveType; const minIndex, NumVertices, startIndex, primCount : Cardinal) : HResult; stdcall;
type TIDirect3DDevice8_DrawPrimitiveUP_Original=function(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const PrimitiveCount : Cardinal; pVertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;
type TIDirect3DDevice8_DrawIndexedPrimitiveUP_Original=function(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const MinVertexIndex, NumVertexIndices, PrimitiveCount : Cardinal; pIndexData : Pointer; IndexDataFormat : TD3DFormat; pVertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;
type TIDirect3DDevice8_SetVertexShader_Original=function(const self:IDirect3DDevice8;const Handle : LongWord) : HResult; stdcall;
type TIDirect3DTexture8_AddRef_Original=function(const self:IDirect3DTexture8) : integer; stdcall;
type TIDirect3DTexture8_Release_Original=function(const self:IDirect3DTexture8) : integer; stdcall;
type TIDirect3DTexture8_GetSurfaceLevel_Original=function(const self:IDirect3DTexture8; const Level : Cardinal; out ppSurfaceLevel : IDirect3DSurface8) : HResult; stdcall;
type TIDirect3DTexture8_UnlockRect_Original=function(const self:IDirect3DTexture8; const Level : Cardinal) : HResult; stdcall;
type TIDirect3DVertexBuffer8_Lock_Original=function(const self:IDirect3DVertexBuffer8; const OffsetToLock, SizeToLock : Cardinal; var ppbData : PByte; const Flags : LongWord) : HResult; stdcall;
type TIDirect3DVertexBuffer8_Unlock_Original=function(const self:IDirect3DVertexBuffer8) : HResult; stdcall;
var Direct3DCreate8:TDirect3DCreate8;
Direct3DCreate8Info: TAPIInfo;
var IDirect3D_CreateDevice: TAPIInfo;
var IDirect3DDevice8_Reset: TAPIInfo;
IDirect3dDevice8_CreateTexture: TApiInfo;
IDirect3DDevice8_CreateVertexBuffer: TAPIInfo;
IDirect3DDevice8_UpdateTexture:TAPIInfo;
IDirect3DDevice8_BeginScene: TAPIInfo;
IDirect3DDevice8_EndScene: TAPIInfo;
IDirect3DDevice8_SetTransform: TAPIInfo;
IDirect3DDevice8_GetTransform: TAPIInfo;
IDirect3DDevice8_SetRenderState: TAPIInfo;
IDirect3DDevice8_SetTexture: TAPIInfo;
IDirect3DDevice8_DrawPrimitive: TAPIInfo;
IDirect3DDevice8_DrawIndexedPrimitive: TAPIInfo;
IDirect3DDevice8_DrawPrimitiveUP: TAPIInfo;
IDirect3DDevice8_DrawIndexedPrimitiveUP: TAPIInfo;
IDirect3DDevice8_SetVertexShader: TAPIInfo;
var IDirect3DVertexBuffer8_Lock: TAPIInfo;
IDirect3DVertexBuffer8_UnLock: TAPIInfo;
var IDirect3DTexture8_AddRef: TAPIInfo;
IDirect3DTexture8_Release: TAPIInfo;
IDirect3DTexture8_GetSurfaceLevel: TAPIInfo;
IDirect3DTexture8_UnlockRect: TAPIInfo;
procedure SaveAllTextures8;
procedure SaveLockedTextureInfo8(aimconfigfile: string);
procedure LoadLockedTextureInfo8(aimconfigfile:string);
procedure handlekeypresses;
function MultiplyMatrix(const A: TD3dMatrix; const B: TD3dMatrix): TD3dMatrix;
function Direct3DCreate8Hook(SDKVersion: DWORD): PIDirect3D8; stdcall;
function IDirect3D_CreateDevice_Hook(const self:IDirect3D8;const Adapter : Cardinal; const DeviceType : TD3DDevType; hFocusWindow : HWND; BehaviorFlags : LongWord; var pPresentationParameters : TD3DPresent_Parameters; out ppReturnedDeviceInterface : IDirect3DDevice8) : HResult; stdcall;
function IDirect3DDevice8_Reset_Hook(const self:IDirect3DDevice8; var pPresentationParameters : TD3DPresent_Parameters) : HResult; stdcall;
function IDirect3DDevice8_CreateTexture_Hook(const self:IDirect3DDevice8;const Width, Height, Levels : Cardinal; const Usage : LongWord; const Format : TD3DFormat; const Pool : TD3DPool; out ppTexture : IDirect3DTexture8) : HResult; stdcall;
function IDirect3DDevice8_CreateVertexBuffer_Hook(const self:IDirect3DDevice8;const Length : Cardinal; const Usage, FVF : LongWord; const Pool : TD3DPool; out ppVertexBuffer : IDirect3DVertexBuffer8) : HResult; stdcall;
function IDirect3DDevice8_UpdateTexture_hook(const self: IDirect3DDevice8; const pSourceTexture, pDestinationTexture : IDirect3DBaseTexture8) : HResult; stdcall;
function IDirect3DDevice8_BeginScene_Hook(const self:IDirect3DDevice8): HResult; stdcall;
function IDirect3DDevice8_EndScene_Hook(const self:IDirect3DDevice8): HResult; stdcall;
function IDirect3DDevice8_SetTransform_Hook(const self: IDirect3DDevice8; const State : TD3DTransformStateType; const pMatrix : TD3DMatrix) : HResult; stdcall;
function IDirect3DDevice8_GetTransform_Hook(const self:IDirect3DDevice8;const State : TD3DTransformStateType; out pMatrix : TD3DMatrix) : HResult; stdcall;
function IDirect3DDevice8_SetRenderState_Hook(const self:IDirect3DDevice8;const State : TD3DRenderStateType; const Value : LongWord) : HResult; stdcall;
function IDirect3DDevice8_SetTexture_Hook(const self:IDirect3DDevice8;const Stage : LongWord; const pTexture : IDirect3DBaseTexture8) : HResult; stdcall;
function IDirect3DDevice8_DrawPrimitive_Hook(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const StartVertex, PrimitiveCount : Cardinal) : HResult; stdcall;
function IDirect3DDevice8_DrawIndexedPrimitive_Hook(const self: IDirect3DDevice8;const _Type : TD3DPrimitiveType; const minIndex, NumVertices, startIndex, primCount : Cardinal) : HResult; stdcall;
function IDirect3DDevice8_DrawPrimitiveUP_Hook(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const PrimitiveCount : Cardinal; pVertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;
function IDirect3DDevice8_DrawIndexedPrimitiveUP_Hook(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const MinVertexIndex, NumVertexIndices, PrimitiveCount : Cardinal; pIndexData : Pointer; IndexDataFormat : TD3DFormat; pVertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;
function IDirect3DDevice8_SetVertexShader_Hook(const self:IDirect3DDevice8;const Handle : LongWord) : HResult; stdcall;
function IDirect3DTexture8_AddRef_Hook(const self:IDirect3DTexture8) : integer; stdcall;
function IDirect3DTexture8_Release_Hook(const self:IDirect3DTexture8) : integer; stdcall;
function IDirect3DTexture8_GetSurfaceLevel_Hook(const self:IDirect3DTexture8; const Level : Cardinal; out ppSurfaceLevel : IDirect3DSurface8) : HResult; stdcall;
function IDirect3DTexture8_UnlockRect_Hook(const self:IDirect3DTexture8; const Level : Cardinal) : HResult; stdcall;
function IDirect3DVertexBuffer8_Lock_Hook(const self:IDirect3DVertexBuffer8; const OffsetToLock, SizeToLock : Cardinal; var ppbData : PByte; const Flags : LongWord) : HResult; stdcall;
function IDirect3DVertexBuffer8_Unlock_Hook (const self:IDirect3DVertexBuffer8) : HResult; stdcall;
var d3d8dll: THandle;
HookedDirect3D: Boolean;
toggleon: boolean;
tempf1: single;
tempf2: single;
tempf3: single;
tempf4,tempf5: single;
XRotation: single;
YRotation: single;
ZRotation: single;
//ce userinterface
ceimage: TBitmap;
cetexture: IDirect3DBaseTexture8; //;IDirect3DTexture8;
texturestringtexture: IDirect3DTexture8;
Lockedstringtexture: IDirect3DTexture8;
UnLockedstringtexture: IDirect3DTexture8;
cevertices: array of CEVertex;
vertexshaderset: boolean;
dontsetlastvertexshader: boolean;
lastvertexshader: thandle;
lastworldmatrix: TD3dmatrix;
dontsetlastworldmatrix: boolean;
worldmatrixset: boolean;
lastprojectionmatrix,lastprojectionmatrix2: TD3dmatrix;
dontsetlastprojectionmatrix: boolean;
projectionmatrixset: boolean;
lastviewmatrix: TD3dmatrix;
dontsetlastviewmatrix: boolean;
viewmatrixset: boolean;
lockedtexturelist: array of TTextureInfo;
texturelist: array of TTextureInfo;
cefont: ID3dXFont;
mysprite: ID3DXSprite;
myspritetexture: IDirect3DTexture8;
targettexture: IDirect3DTexture8;
locktexture: IDirect3DTexture8;
movementtexture: IDirect3DTexture8;
blackTexture: IDirect3DTexture8;
watchfornextdraw: boolean;
nextdrawstage: dword;
currenttexture: integer;
xylist: array of td3dxvector3;
xylist2: array of td3dxvector3;
oldpos: td3dxvector3;
screencenter: td3dxvector2;
resetdevice: boolean;
implementation
procedure SaveAllTextures8;
var i: integer;
begin
texturelistCS.Enter;
try
for i:=0 to length(texturelist)-1 do
D3DXSaveTextureToFile(pchar('CETEX'+IntToStr(i)+'.bmp'),D3DXIFF_BMP,texturelist[i].texturehandle,nil);
finally
texturelistcs.Leave;
end;
end;
procedure Removetexture(j: integer);
var i: integer;
begin
if texturepointer>j then dec(texturepointer);
texturelistcs.Enter;
try
try
for i:=j to length(texturelist)-2 do
begin
texturelist[i].Width:=texturelist[i+1].Width;
texturelist[i].Height:=texturelist[i+1].Height;
texturelist[i].Levels:=texturelist[i+1].Levels;
texturelist[i].Usage:=texturelist[i+1].Usage;
texturelist[i].Format:=texturelist[i+1].Format;
texturelist[i].Pool:=texturelist[i+1].Pool;
texturelist[i].locked:=texturelist[i+1].locked;
texturelist[i].xdelta:=texturelist[i+1].xdelta;
texturelist[i].ydelta:=texturelist[i+1].ydelta;
texturelist[i].zdelta:=texturelist[i+1].zdelta;
copymemory(@texturelist[i].texturehandle,@texturelist[i+1].texturehandle,4);
end;
except
outputdebugstring('error in removing texture (1)');
end;
try
fillmemory(@texturelist[length(texturelist)-1].texturehandle,4,0);
except
outputdebugstring('error in removing texture (2)');
end;
try
setlength(texturelist,length(texturelist)-1);
except
outputdebugstring('error in removing texture (2)');
end;
if texturepointer>=length(texturelist) then texturepointeR:=length(texturelist)-1;
finally
texturelistcs.Leave;
end;
end;
procedure handlekeypresses;
var found: boolean;
i,j: integer;
begin
if keys.callibrationmode then
begin
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
locking:=true;
texturelistcs.Enter;
try
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
imreleasing:=true;
lockedtexturelist[j].texturehandle._Release;
imreleasing:=false;
fillmemory(@lockedtexturelist[j].texturehandle,4,0);
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;
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;
finally
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -