首页 > 解决方案 > delphi无窗口关机检测

问题描述

我正在编写一个非常简单的 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 的方法可以在系统关闭时正确退出程序?

标签: delphishutdown-hooksystem-shutdown

解决方案


推荐阅读