重新启动Windows资源管理器

时间:2013-03-22 16:19:20

标签: delphi

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

1 个答案:

答案 0 :(得分:2)

在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');

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