delphi - 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 的方法可以在系统关闭时正确退出程序?
解决方案
推荐阅读
- javascript - 即使设置了滚动功能,暂停按钮也会暂停
- google-analytics - 用户退出选项卡时如何手动结束当前会话?
- javascript - 如何验证从下拉列表中选择特定产品的最小值和最大值
- angular6 - 端口 xxx 已在使用中。使用“--port”指定不同的端口
- javascript - 从更改数组中获取静态值
- python - 在 django 中完成一个函数后如何说 python 调度程序运行一个线程?
- sql - 如何在 SQL Server 中使用动态键存储 JSON 数据
- scala - 验证输入火花数据帧中的时间戳以生成正确的输出火花数据帧
- firebird - 如何从 firebird nbackup 获取总未使用的页面
- r - 将平铺的 WFS 集成到 R Leaflet Map