Delphi 关闭自己,重新运行


本文整理自网络,侵删。

 
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;

相关阅读 >>

Delphi 网页数据抓取

Delphi copy 从字符串中复制指定范围中的字符

Delphi窗体显示echarts图表

Delphi 数字转excel字母列序号

Delphi xe5 android程序常用的unit

Delphi 判断某个磁盘分区是否存在

Delphi tstringlist删除重复项

Delphi内存映射大文件

Delphi动态建立panel无法更改颜色?

Delphi xe vcl - tlinklabel(链接标签)

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...