再谈Delphi关机消息拦截 -- 之控制台程序 SetConsoleCtrlHandler(控制台使用回调函数拦截,比较有意思)

时间:2024-12-13 10:07:32

这里补充一下第一篇文章中提到的拦截关机消息

Delphi消息拦截:http://blog.****.net/cwpoint/archive/2011/04/05/6302314.aspx

下面我再介绍一种在控制台程序中拦截关机消息的方法。

使用SetConsoleCtrlHandler函数。经过测试这个函数不能取消操作。

  1. program Project1;
  2. {$APPTYPE CONSOLE}
  3. uses
  4. SysUtils,
  5. Windows,
  6. Messages;
  7. function EndMsg(fdwCtrlType: Cardinal): Boolean; stdcall;
  8. begin
  9. Result := False;
  10. case fdwCtrlType of
  11. CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT:
  12. MessageBox(0, PChar('注销、重启、关机'), PChar(''), 0);
  13. end;
  14. end;
  15. begin
  16. if not SetConsoleCtrlHandler(@EndMsg, True) then
  17. Exit;
  18. while True do
  19. Sleep(1000);
  20. end.

http://blog.****.net/cwpoint/article/details/6373025