DELPHI 可以像C++一样.在程序里直接替换 API吗?
如果不用 API HOOK 还有什么方法直接替换API的地址.

解决方案 »

  1.   

    除了.HOOK 就没了么?C++的建同名会自动替换的啊.
    DELPHI 的为什么就不能啊..
      

  2.   

    编译器会自动识别了,和你替换不替换没有什么关系,事实上如果是完全的API替换,必须用自己重写实现API功能
      

  3.   

    function CreateWindowExA(dwExStyle: DWORD; lpClassName: PAnsiChar;
      lpWindowName: PAnsiChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer;
      hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall;
    type
    _CreateWindowExA = function (dwExStyle: DWORD; lpClassName: PAnsiChar;
      lpWindowName: PAnsiChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer;
      hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND;
    var
      FPUCW: Word;
       ahwnd  : Cardinal ;
       apointtt : Pointer;
    begin
       apointtt :=GetProcAddress(LoadLibrary('USER32.dll'),'CreateWindowExA');  Result := _CreateWindowExA(HOOKlei[0].BaseAddr)(dwExStyle, lpClassName, lpWindowName, dwStyle,
        X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
    end;这样也不行哇
      

  4.   

    你还不如直接复制自带PAS单元里的声明,改个名字就行了
      

  5.   

    不自动替换.
    我是想在程序自动创建窗口的时候..调用我的自定义,替换了.原来的API.CreateWindowExA修改里面的参数.再返回.
      

  6.   

    如果用 API HOOK...是会先加载 DLL
    我就是想在不加载  'USER32.dll' 的情况下 调用. .CreateWindowExA 功能
      

  7.   

    在C++ 里面.因为作用域的关系..如果有同名 API 函数,编译器会自动先用.自己定义的函数.
    那 DELPHI 有没这方面的办法的?
      

  8.   

    你自己写个同名函数,前边带单元名不就可以了 ****.CreateFile