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 用wininet 单元实现 post提交数据

Delphi 取最前窗口标题(不重复)

Delphi 如何将bitmap位图与base64字符串相互转换

Delphi 最快字符串查找(匹配)算法

Delphi 获取其它软件的tlistbox句柄,怎么取得listbox中的数据

获取剪贴板文字内容的代码

Delphi调试技巧

Delphi 获得父目录�c指定级父目录

Delphi 安装fastreport4.8.xx

Delphi 2009 之 tcategorypanelgroup[2]: headeralignment、gradientdirection

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



打赏

取消

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

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

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

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

评论

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

    正在狠努力加载,请稍候...