📄 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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -