Thanks!    That was quite helpful!   I have a test program kind of working.  

I notice I only  get 5 seconds to do what I am going to before it closes, and I 
also notice that my program can no longer respond to keystrokes after I hit the 
red X.    How do other programs get around this?  For example if I open word 
for windows and type something and hit the X it asks if I want to save it and 
will wait indefinitely  for a response.   Is this a limitation because I am 
running console application,    Is there a way I can do this with my console 
application as well?

Here is my test program:

uses crt,windows;
var x,y: longint;
    Closetheprogram:Boolean;

Function Console_Handler(dwCtrlType: Dword) : BOOL; stdcall;
Begin
  Console_Handler:=false;
  Case dwCtrlType of
    CTRL_CLOSE_EVENT,
    CTRL_LOGOFF_EVENT,
    CTRL_SHUTDOWN_EVENT :
      begin
         Console_Handler:=True;
         CloseTheProgram:=True;
          Writeln('start');
          For X:= 1 to 2000000 do  //this keeps the Console_Handler busy so my 
program continues to execute;
              Begin
                 sleep(1);
                 inc(y);
              end;
          Writeln('stop');
        Console_Handler:=True;
        CloseTheProgram:=True;
      end;
  end;
end;

Begin
CloseTheProgram:=False;
if SetConsoleCtrlHandler(@Console_handler, TRUE) then
   Writeln('Console CTRL Handler Installed')
else
   Writeln('Console CTRL Handler Not Installed');
Repeat
Write('.');
Sleep(100);
Until CloseTheProgram or keypressed;

If Keypressed then
Repeat
readkey;
Until not(Keypressed);

Repeat
Write(',');
Sleep(100);
Until keypressed;

Writeln(ClosetheProgram);
end.


-----Original Message-----
From: fpc-pascal <fpc-pascal-boun...@lists.freepascal.org> On Behalf Of Henry 
Vermaak
Sent: Sunday, May 19, 2019 11:44 AM
To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org>
Subject: Re: [fpc-pascal] Detecting console close with red X on windows

On Sun, 19 May 2019 at 14:33, James Richters <ja...@productionautomation.net> 
wrote:
>
> Could I please get an example of this?  I see lots of examples of how to do 
> it in C but when I try to translate to pascal I always struggle a quite a bit.

Have a look at the fpc source in packages/fv/src/w32msg.inc and search for 
SetConsoleCtrlHandler and then HandleConsoleCtrl.  There's nothing to it, 
really.

Henry
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org 
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to