如何用 Delphi 重新启动“explorer.exe”shell?

vddsk6oq  于 11个月前  发布在  Shell
关注(0)|答案(2)|浏览(168)

我想重新启动“explorer.exe”例如任务栏进程与 Delphi 。
在一个批处理文件中,我会这样做(工作!):

taskkill.exe /IM explorer.exe /F
start explorer.exe

字符串
在 Delphi 中,我试图对这两个命令使用ShellExecute。杀死工作,但是,我没有设法让资源管理器回来。
我应该如何调用ShellExecute来重新启动资源管理器,包括Windows(而不仅仅是一个单一的文件浏览器窗口)?

qnakjoqk

qnakjoqk1#

如果你想关闭资源管理器窗口或浏览器,这是有区别的。资源管理器窗口可以通过使用getwindow函数遍历窗口列表来关闭,并向所有资源管理器窗口发送wm_close消息。你可以通过'CabinetWClass'或'ExploreWClass'类类型来识别资源管理器窗口。
必须通过找到标题为“Progman”的窗口并杀死该窗口来关闭该窗口,因为它不会响应wm_close。该窗口应自动重新打开。关闭该窗口的示例函数:

procedure TForm.Button1Click(Sender: TObject);
var
  wnd: hwnd;
  pid: dword;
  processhandle: thandle;
begin
  wnd := findwindow('Progman', NIL);
  IF wnd > 0 THEN
  BEGIN
    GetWindowThreadProcessId(wnd, pid);
    IF (pid > 0) THEN
    BEGIN
      processhandle := OpenProcess(1, false, pid);
      IF (processhandle > 0) THEN
      BEGIN
        TerminateProcess(processhandle, 0);
        CloseHandle(processhandle);
      END;
    END;
  END;
end;

字符串

cgyqldqp

cgyqldqp2#

如果资源管理器本身没有运行,ShellExecute需要完整的路径,即C:\Windows\explorer.exe才能工作。

相关问题