uses shellapi;
procedure KillProcess(hWindowHandle: HWND);
var
hprocessID: INTEGER;
processHandle: THandle;
DWResult: DWORD;
begin
SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,
SMTO_ABORTIFHUNG or SMTO_NORMAL, 500, DWResult);
if isWindow(hWindowHandle) then
begin
{ Get the process identifier for the window}
GetWindowThreadProcessID(hWindowHandle, @hprocessID);
if hprocessID <> 0 then
begin
{ Get the process handle }
processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
False, hprocessID);
if processHandle <> 0 then
begin
{ Terminate the process }
TerminateProcess(processHandle, 0);
CloseHandle(ProcessHandle);
end;
end;
end;
end;
procedure AppRestart;
var
AppName : PChar;
begin
AppName:=PChar(Application.ExeName);
ShellExecute(Application.Handle, 'open', AppName, nil, nil, SW_SHOWNORMAL);
KillProcess(Application.Handle);
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
AppRestart;
end;