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

📄 directxhook.pas.svn-base

📁 这是一段游戏修改工具的源代码.ring3功能由dephi开发,驱动是C开发.希望对大家有帮助
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
    xpp: ^Pdword;    AIDirect3DVertexBuffer8: IDirect3DVertexBuffer8;begin  //restore with original code  asm    push esi    push edi    lea esi,Direct3DCreate8Info.original[0]    mov edi,Direct3DCreate8Info.location    movsd    movsb    pop edi    pop esi  end;  outputdebugstring('Creating a direct3d8 object');  //execute api  result:=directxhook.Direct3DCreate8(SDKVersion);  x:=dword(result);  //hook createdevice  outputdebugstring('Hooking createdevice');  if IDirect3D_CreateDevice.location=nil then    IDirect3D_CreateDevice.location:=pointer(pdword(pdword(x)^+$3c)^);  virtualprotect(pointer(pdword(x)^+$3c),4,PAGE_EXECUTE_READWRITE,y);  pdword(pdword(x)^+$3c)^:=dword(@IDirect3D_CreateDevice_Hook);  virtualprotect(pointer(pdword(x)^+$3c),4,y,y);  outputdebugstring('Hooking createdevice-success');end;function Fixhook(const self:IDirect3DDevice8):boolean; stdcall;var x:dword;begin    virtualprotect(pdword(pdword(dword(Self))^),4*77,PAGE_EXECUTE_READWRITE,x);    //hook Reset    if IDirect3DDevice8_Reset.location=nil then      IDirect3DDevice8_Reset.location:=pointer(pdword(pdword(dword(Self))^+4*14)^);    pdword(pdword(dword(Self))^+4*14)^:=dword(@IDirect3DDevice8_Reset_Hook);    //hook createtexture    if IDirect3DDevice8_CreateTexture.location=nil then      IDirect3DDevice8_CreateTexture.location:=pointer(pdword(pdword(dword(Self))^+4*20)^);    pdword(pdword(dword(Self))^+4*20)^:=dword(@IDirect3DDevice8_CreateTexture_Hook);    //hook CreateVertexBuffer    if IDirect3DDevice8_CreateVertexBuffer.location=nil then      IDirect3DDevice8_CreateVertexBuffer.location:=pointer(pdword(pdword(dword(Self))^+4*23)^);    pdword(pdword(dword(Self))^+4*23)^:=dword(@IDirect3DDevice8_CreateVertexBuffer_Hook);    //hook beginscene    if IDirect3DDevice8_BeginScene.location=nil then      IDirect3DDevice8_BeginScene.location:=pointer(pdword(pdword(dword(Self))^+4*34)^);    pdword(pdword(dword(Self))^+4*34)^:=dword(@IDirect3DDevice8_BeginScene_Hook);    //EndScene    if IDirect3DDevice8_EndScene.location=nil then      IDirect3DDevice8_EndScene.location:=pointer(pdword(pdword(dword(Self))^+4*35)^);    pdword(pdword(dword(Self))^+4*35)^:=dword(@IDirect3DDevice8_EndScene_Hook);    //SetTransform    if IDirect3DDevice8_SetTransform.location=nil then      IDirect3DDevice8_SetTransform.location:=pointer(pdword(pdword(dword(Self))^+4*37)^);    pdword(pdword(dword(Self))^+4*37)^:=dword(@IDirect3DDevice8_SetTransform_Hook);    x:=dword(pdword(dword(Self))^+4*37);    //GetTransform    if IDirect3DDevice8_GetTransform.location=nil then      IDirect3DDevice8_GetTransform.location:=pointer(pdword(pdword(dword(Self))^+4*38)^);    pdword(pdword(dword(Self))^+4*38)^:=dword(@IDirect3DDevice8_GetTransform_Hook);    //hook SetRenderState    if IDirect3DDevice8_SetRenderState.location=nil then      IDirect3DDevice8_SetRenderState.location:=pointer(pdword(pdword(dword(Self))^+4*50)^);    pdword(pdword(dword(Self))^+4*50)^:=dword(@IDirect3DDevice8_SetRenderState_Hook);    //hook SetTexture    if IDirect3DDevice8_SetTexture.location=nil then      IDirect3DDevice8_SetTexture.location:=pointer(pdword(pdword(dword(Self))^+4*61)^);    pdword(pdword(dword(Self))^+4*61)^:=dword(@IDirect3DDevice8_SetTexture_Hook);//----------    //hook DrawPrimitive    if IDirect3DDevice8_DrawPrimitive.location=nil then      IDirect3DDevice8_DrawPrimitive.location:=pointer(pdword(pdword(dword(Self))^+4*70)^);    pdword(pdword(dword(Self))^+4*70)^:=dword(@IDirect3DDevice8_DrawPrimitive_Hook);    //hook DrawIndexedPrimitive    if IDirect3DDevice8_DrawIndexedPrimitive.location=nil then      IDirect3DDevice8_DrawIndexedPrimitive.location:=pointer(pdword(pdword(dword(Self))^+4*71)^);    pdword(pdword(dword(Self))^+4*71)^:=dword(@IDirect3DDevice8_DrawIndexedPrimitive_Hook);    //hook DrawPrimitiveUP    if IDirect3DDevice8_DrawPrimitiveUP.location=nil then      IDirect3DDevice8_DrawPrimitiveUP.location:=pointer(pdword(pdword(dword(Self))^+4*72)^);    pdword(pdword(dword(Self))^+4*72)^:=dword(@IDirect3DDevice8_DrawPrimitiveUP_Hook);    //hook DrawIndexedPrimitiveUP    if IDirect3DDevice8_DrawIndexedPrimitiveUP.location=nil then      IDirect3DDevice8_DrawIndexedPrimitiveUP.location:=pointer(pdword(pdword(dword(Self))^+4*73)^);    pdword(pdword(dword(Self))^+4*73)^:=dword(@IDirect3DDevice8_DrawIndexedPrimitiveUP_Hook);//----------    //hook SetVertexShader    if IDirect3DDevice8_SetVertexShader.location=nil then      IDirect3DDevice8_SetVertexShader.location:=pointer(pdword(pdword(dword(Self))^+4*76)^);    pdword(pdword(dword(Self))^+4*76)^:=dword(@IDirect3DDevice8_SetVertexShader_Hook);    virtualprotect(pointer(pdword(dword(Self))^),4*77,x,x);end;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;var pMode: TD3DDisplayMode;    x,y: dword;    tl: TD3DLocked_Rect;    r: Trect;    pr: prect;    ca,cr,cg,cb: word;begin  directxversion:=directx8;  setlength(xylist,0);  setlength(xylist2,0);  outputdebugstring('going to create a direct3d8 device');  self.GetAdapterDisplayMode(D3dadapter_default,pmode);{  x:=pPresentationParameters.hDeviceWindow;  zeromemory(@ppresentationParameters,sizeof(td3dpresent_parameters));  pPresentationParameters.Windowed:=true;  pPresentationParameters.SwapEffect:=d3dswapeffect_discard;  pPresentationParameters.BackBufferFormat:=pmode.format;  pPresentationParameters.hDeviceWindow:=x;  if pPresentationParameters.hDeviceWindow<>0 then  begin    setWindowPos(pPresentationParameters.hDeviceWindow,HWND_NOTOPMOST	, 10,10,600,450, SWP_NOZORDER);  end;  if hFocusWindow<>0 then  begin    setWindowPos(pPresentationParameters.hDeviceWindow,HWND_NOTOPMOST	, 10,10,600,450,SWP_NOMOVE or SWP_NOZORDER);  end;}  Behaviorflags:=behaviorflags and not (D3DCREATE_PUREDEVICE);  result:=TIDirect3D_CreateDevice_Original(IDirect3D_CreateDevice.location)(self,Adapter,Devicetype,hFocusWindow,BehaviorFlags,pPresentationParameters,ppReturnedDeviceInterface);  try    texturepointer:=-1;    screencenter.x:=screen.Width / 2;    screencenter.y:=screen.Height / 2;       if result=0 then  //also hook some methods of IDirect3DDevice8    begin    if resetdevice then    begin      if mysprite<>nil then mysprite:=nil;      D3DXCreateSprite(ppReturnedDeviceInterface,mysprite);      cefont.OnResetDevice;      resetdevice:=false;      exit;    end;    D3DXCreateTextureFromFile(ppReturnedDeviceInterface,pchar(keys.CEDir+'lockedstring.bmp'),lockedStringTexture);    D3DXCreateTextureFromFile(ppReturnedDeviceInterface,pchar(keys.CEDir+'unlockedstring.bmp'),unlockedStringTexture);    D3DXCreateTextureFromFile(ppReturnedDeviceInterface,pchar(keys.CEDir+'texturestring.bmp'),textureStringTexture);    D3DXCreateTextureFromFile(ppReturnedDeviceInterface,pchar(keys.CEDir+'Black.bmp'),blackTexture);//    D3DXCreateTextureFromFileEx(ppReturnedDeviceInterface,pchar(keys.CEDir+'Logo3.bmp'),D3DX_DEFAULT,D3DX_DEFAULT,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,$FFFFFFFF,nil,nil,myspritetexture);    D3DXCreateTextureFromFileEx(ppReturnedDeviceInterface,pchar(keys.CEDir+'TargetTexture.bmp'),D3DX_DEFAULT,D3DX_DEFAULT,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,$FFFFFFFF,nil,nil,targettexture);    D3DXCreateTextureFromFileEx(ppReturnedDeviceInterface,pchar(keys.CEDir+'Locktexture.bmp'),D3DX_DEFAULT,D3DX_DEFAULT,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,$FFFFFFFF,nil,nil,locktexture);    D3DXCreateTextureFromFileEx(ppReturnedDeviceInterface,pchar(keys.CEDir+'Movementtexture.bmp'),D3DX_DEFAULT,D3DX_DEFAULT,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,$FFFFFFFF,nil,nil,movementtexture);    cefonthandle.free;    cefonthandle:=tfont.Create;    cefonthandle.Color:=clred;    cefonthandle.Name:='Courier';    D3DXCreateFont(ppReturnedDeviceInterface,cefonthandle.handle,CEFont);    D3DXCreateSprite(ppReturnedDeviceInterface,mysprite);    fixhook(ppReturnedDeviceInterface);  end;  except    outputdebugstring('something went wrong');  end;end;function IDirect3DDevice8_Reset_Hook(const self:IDirect3DDevice8; var pPresentationParameters : TD3DPresent_Parameters) : HResult; stdcall;var i: integer;    err: dword;begin  try    mysprite.OnLostDevice;    cefont.OnLostDevice;    texturelistcs.Enter;    lockedtexturelistcs.Enter;    try      fillmemory(@texturelist[0],length(texturelist)*sizeof(TTextureInfo),0);      fillmemory(@lockedtexturelist[0],length(texturelist)*sizeof(TTextureInfo),0);      setlength(texturelist,0);      setlength(lockedtexturelist,0);    finally      lockedtexturelistcs.Leave;      texturelistcs.Leave;    end;  except    outputdebugstring('error in reset(8)');  end;  texturepointer:=-1;  err:=TIDirect3DDevice8_Reset_Original(IDirect3DDevice8_Reset.location)(self,pPresentationParameters);  try    if err=0 then    begin      mysprite.OnResetDevice;      cefont.OnResetDevice;    end else    begin      resetdevice:=true;    end;  except    //outputdebugstring('Error in my reset routine');  end;  result:=err;end;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;type a=^IDirect3DTexture8;var i: integer;    x: dword;begin  result:=TIDirect3DDevice8_CreateTexture_Original(IDirect3DDevice8_createtexture.location)(self,width,height,levels,usage,format,pool,pptexture);  texturelistcs.Enter;  try    if imdrawing then exit;    if not ((usage=0) and (pool=D3DPOOL_DEFAULT)) then    begin      i:=length(texturelist);      setlength(texturelist,i+1);      copymemory(@texturelist[i].texturehandle,@pptexture,4);      texturelist[i].Width:=width;      texturelist[i].Height:=height;      texturelist[i].Levels:=levels;      texturelist[i].Usage:=usage;      texturelist[i].Format:=format;      texturelist[i].Pool:=pool;      texturelist[i].locked:=false;      //texturelist[i].checked:=false;      if texturepointer=-1 then texturepointer:=0;    end;  finally    texturelistcs.Leave;  end;  if result=0 then  begin    //hook release    virtualprotect(pdword(pdword(dword(ppTexture))^+4*2),4,PAGE_EXECUTE_READWRITE,x);    if IDirect3DTexture8_release.location=nil then      IDirect3DTexture8_release.location:=pointer(pdword(pdword(dword(ppTexture))^+4*2)^);    pdword(pdword(dword(ppTexture))^+4*2)^:=dword(@IDirect3DTexture8_release_Hook);    virtualprotect(pdword(pdword(dword(ppTexture))^+4*2),4,x,x);  end;end;function IDirect3DDevice8_CreateVertexBuffer_Hook(const self:IDirect3DDevice8;const Length : Cardinal; const Usage, FVF : LongWord; const Pool : TD3DPool; out ppVertexBuffer : IDirect3DVertexBuffer8) : HResult; stdcall;begin  result:=TIDirect3DDevice8_CreateVertexBuffer_Original(IDirect3DDevice8_CreateVertexBuffer.location)(self,length,usage,fvf,pool,ppVertexBuffer);end;function IDirect3DDevice8_UpdateTexture_hook(const self: IDirect3DDevice8; const pSourceTexture, pDestinationTexture : IDirect3DBaseTexture8) : HResult; stdcall;begin  result:=TIDirect3DDevice8_UpdateTexture_Original(IDirect3DDevice8_UpdateTexture.location)(self,pSourceTexture,pDestinationTexture);end;function IDirect3DDevice8_BeginScene_Hook(const self:IDirect3DDevice8): HResult; stdcall;var cp: single;    c: TD3DClipStatus8;begin  setlength(xylist,0);  setlength(xylist2,0);  result:=TIDirect3DDevice8_BeginScene_Original(IDirect3DDevice8_BeginScene.location)(self);end;procedure DrawHotkeylist8(const self: IDirect3DDevice8;vp:td3dviewport8);var position,scale: td3dxvector2;    pdesc: TD3DSurface_Desc;    i: integer;    r: trect;begin  mysprite._Begin;  if blacktexture.GetLevelDesc(0,pdesc)=0 then  begin    scale.x:=requiredkeylistwidth / pdesc.Width;    scale.y:=requiredkeylistheight / pdesc.Height;  end  else  begin    scale.x:=requiredkeylistwidth;    scale.y:=requiredkeylistheight;  end;  position.x:=vp.Width-requiredkeylistwidth;  position.y:=0;  mysprite.Draw(blacktexture,nil,@scale,nil,0,@position,D3DCOLOR_ARGB(140,255,255,255));  mysprite._End;

⌨️ 快捷键说明

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