📄 directxhook.pas.svn-base
字号:
unit DirectxHook;interface//directx8 hookuses 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;implementationprocedure 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 j:=-1; 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 locking:=false; texturelistcs.Leave; end; end; try texturelistcs.Enter;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -