📄 directx9hook.pas.svn-base
字号:
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 + -