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;

相关阅读 >>

monthoftheyear:取得一个tdatetime变量的月份在年度中的索引

Delphi 对比时间的函数

Delphi2010中Delphi class explorer妙用

Delphi xe7 取得进程占用内存的两个函数

Delphi读取一个access数据库中的表名

Delphi 下载整个网站图片例子

Delphi 网络时间校对

Delphi 中文大写日期转换函数

Delphi sysutils.lastdelimiter - 判断一个字符串在另一个字符串中最后出现的位置

Delphi excel数据导入数据库表

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



打赏

取消

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

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

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

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

评论

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