【问题标题】:Restaring Windows Explorer重新启动 Windows 资源管理器
【发布时间】:2013-03-12 14:12:05
【问题描述】:

我有一个带有一个按钮的表单。我需要在 Button1.Click 上重新启动 Windows 资源管理器。我用谷歌搜索了它,但我没有得到任何适当的解决方案。所有的电话,该解决方案适用于 WinXP、Vista 但不适用于 Win7。请提供准确的解决方案。

【问题讨论】:

  • 您可能会尝试以一种 hacky 的方式kill it 并重新启动它。为什么你还需要这个?
  • taskkill /IM "explorer.exe" /F(具有管理员权限)是否有效?
  • @TLama 其实这篇文章的第一个代码stackoverflow.com/q/13770128/2087187是他需要的,因为他要重启它!
  • @Matheus,你的意思是类似于this,不是吗?
  • @Rubi:嗯,我们都知道如何使用ShellExecute 开始。杀死是一件很难的事情,尤其是(可能会猜到)关键系统进程。

标签: delphi


【解决方案1】:

在 TlHelp32 上添加使用

在 Windows 7 或更高版本中,此功能有效:

function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  ProcessHandle: Cardinal;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

  if FSnapshotHandle = INVALID_HANDLE_VALUE then 
    RaiseLastOSError;
  try
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

    while Integer(ContinueLoop) <> 0 do
    begin
      if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
        UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
        UpperCase(ExeFileName))) then
      begin 
        ProcessHandle:= OpenProcess(PROCESS_TERMINATE, BOOL(0),     FProcessEntry32.th32ProcessID), 0);
        if ProcessHandle > 0 then
        begin
          try  
            Result := Integer(TerminateProcess(ProcessHandle);
          finally
            CloseHandle(ProcessHandle);
          end; 
        end
        else
          RaiseLastOSError;   
      end;
      ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
  finally 
    CloseHandle(FSnapshotHandle);
  end; 
end;

它杀死并重新开始!

KillTask('explorer.exe');

在以前的版本中,它只会杀死!!

【讨论】:

  • 但我也需要 Vista 和 XP。
  • 那我也尝试了你的hacky方式。它确实在没有行政特权的情况下杀死了探险家,但永远不会重新启动。所以...
  • 检查 ShellExecute 'Explorer.exe' 是否可以在没有管理员权限的情况下打开
  • @RubiHalder ShellExecute(0, pchar('open'), pchar('explorer.exe'), nil, nil, SW_HIDE);
  • 请给我完整的代码。我收到了执行错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多