www.pudn.com > SPYQQ3.rar > CallSelf.pas


unit CallSelf; 
 
interface 
 
uses Windows; 
 
type 
 
   TInstallHook  = procedure();stdcall; 
   TUnHook       = procedure();stdcall; 
   TGetShareData = function ():Pointer;stdcall; 
 
var 
  DLLInstallHook  : TInstallHook = nil; 
  DLLUnHook       : TUnHook = nil; 
  DllGetShareData : TGetShareData = nil; 
 
 procedure  InstallHookA; 
 procedure  UnHookA; 
 function   GetShareDataA : Pointer; 
 
implementation 
 
procedure LoadDllFunc; 
var 
 dllHandle : Thandle; 
 ThisDLLName : array [0..MAX_PATH] of char; 
begin 
  GetModuleFileName(HInstance, @ThisDLLName[0], MAX_PATH); 
  dllHandle := LoadLibrary(@ThisDLLName[0]); 
  if dllHandle > 0 then begin 
     DLLInstallHook  := GetProcAddress(dllHandle,'MsgHookOn'); 
     DLLUnHook       := GetProcAddress(dllHandle,'MsgHookOff'); 
     DllGetShareData := GetProcAddress(dllHandle,'GetShareData'); 
  end; 
end; 
 
procedure InstallHookA; 
begin 
   if @DllInstallHook = nil then begin 
      LoadDllFunc; 
   end; 
   if @DllInstallHook <> nil then 
     DllInstallHook; 
end; 
 
procedure  UnHookA; 
begin 
   if @DllUnHook = nil then begin 
      LoadDllFunc; 
   end; 
   if @DllUnHook <> nil then 
     DllUnHook; 
end; 
 
function GetShareDataA : Pointer; 
begin 
   Result := nil; 
   if @DllGetShareData = nil then begin 
     LoadDllFunc; 
   end; 
   if @DllGetShareData <> nil then 
      Result := DllGetShareData; 
end; 
 
end.