Ik heb een probleem met onderstaande code. Als ik met verkenner klik op de exe werkt alles goed. Maar als ik het programma start vanuit een “dos box” dat blijft het programma actief in de task list na een KeyPressed. Het programma verdwijnt pas uit de task list als ik de “dos box” sluit :-(
Code:
program test;
uses
Windows;
const
ATTACH_PARENT_PROCESS = DWORD(-1);
function AttachConsole(ProcessId: DWORD): BOOL; stdcall;
external 'kernel32.dll' name 'AttachConsole';
{$R *.RES}
function KeyPressed:Boolean;
var
lpNumberOfEvents : DWORD;
lpBuffer : TInputRecord;
lpNumberOfEventsRead : DWORD;
nStdHandle : THandle;
begin
Result:=false;
//get the console handle
nStdHandle := GetStdHandle(STD_INPUT_HANDLE);
lpNumberOfEvents:=0;
//get the number of events
GetNumberOfConsoleInputEvents(nStdHandle,lpNumberOfEvents);
if lpNumberOfEvents<> 0 then
begin
//retrieve the event
PeekConsoleInput(nStdHandle,lpBuffer,1,lpNumberOfEventsRead);
if lpNumberOfEventsRead <> 0 then
begin
if lpBuffer.EventType = KEY_EVENT then //is a Keyboard event?
begin
if lpBuffer.Event.KeyEvent.bKeyDown then //the key was pressed?
Result:=true
else
FlushConsoleInputBuffer(nStdHandle); //flush the buffer
end
else
FlushConsoleInputBuffer(nStdHandle);//flush the buffer
end;
end;
end;
begin
if not AttachConsole(ATTACH_PARENT_PROCESS) then
AllocConsole;
Writeln('test');
repeat
sleep(10);
until KeyPressed;
end.
De vraag is hoe kan ik het programma direct vrijgeven na de KeyPressed.
Bookmarks