我正在编写一个非常简单的 Delphi 2007 程序来监视系统活动。该程序只是挂钩一个 DLL 过程,并且必须简单地等待系统关闭,因为所有处理都在 DLL 回调中完成。是一个无窗口程序,因为我什至从源代码中删除了 {$APPTYPE CONSOLE}。代码非常简单:
begin
try
// TODO -oUser -cConsole Main : Insert code here }
// If load sucessfull
If (LoadDLL ()) Then Begin
// Hook
_dllSetWindowsHookEx (LibHandle);
If (_dllHooked ()) Then Begin
Repeat
Until .......what?;
// Unhook
_dllUnhookWindowsHookEx ();
End;
// Release
UnloadDLL ()
End
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
我检查了这个问题,似乎这可能会起作用:
Repeat
Until GetSystemMetrics(SM_SHUTTINGDOWN) <> 0;
但是,它似乎也将使用大量 CPU。是否有另一种类似 PeekMessage/WaitForSingleObject 的方法可以在系统关闭时正确退出程序?