【问题标题】:How to permanently terminate Windows Explorer (the "explorer.exe" process)?如何永久终止 Windows 资源管理器(“explorer.exe”进程)?
【发布时间】:2013-01-29 05:25:34
【问题描述】:

我正在使用以下代码来终止一个进程:

function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  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
      Result := Integer(TerminateProcess(
                    OpenProcess(PROCESS_TERMINATE,
                                BOOL(0),
                                FProcessEntry32.th32ProcessID),
                                0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

问题是,当我调用上述函数以永久终止explorer.exe 时,Windows 资源管理器虽然终止,但之后又重新启动:

KillTask('explorer.exe');

我正在使用 Delphi XE3、Delphi 7 和 Windows 8。

【问题讨论】:

  • 请注意,此代码会泄漏进程句柄。 (终止进程不会神奇地使所有句柄都消失。)
  • 这是设计使然。系统确保您的 shell 运行。如果你想更换外壳,那么你应该这样做。
  • 您能否提供替代代码以永久终止资源管理器进程。
  • FWIW 这不是一个真正的德尔福问题。这是一个 Windows 问题。使用 Delphi 标记可能会吓跑一些 Windows 专家。

标签: windows delphi winapi


【解决方案1】:

基于此Exit Explorer 功能和Luke 在this post 中调试的代码,您可以尝试使用以下代码:

警告:

这种方式绝对是无证的!所以这篇文章中出现的所有常量和变量都是虚构的。任何与真实记录代码的相似之处纯属巧合:-)

function ExitExplorer: Boolean;
var
  TrayHandle: HWND;
const
  WM_EXITEXPLORER = $5B4;
begin
  Result := False;
  TrayHandle := FindWindow('Shell_TrayWnd', nil);
  if TrayHandle <> 0 then
    Result := PostMessage(TrayHandle, WM_EXITEXPLORER, 0, 0);
end;

我已经在 Windows 7 中对其进行了测试,它可以正常工作,甚至不需要管理员提升。不知道其他系统怎么样(我会说这至少在 Windows XP 上不起作用,但这只是一个猜测)。

【讨论】:

  • explorer.exe进程真的终止了吗?
  • @David,是的,确实如此。至少在我的 Windows 7 机器上。但这仍然只是一个棘手的方法......
  • 嘿,感谢 Tlama,它就像一个魅力。感谢您的快速响应。
  • 我已经在 windows 8 pro 32 bit 上测试过
  • @TLama,喜欢这个警告。您可以添加:“如果您或您的团队成员中的任何人被发现执行此操作,我们将否认与您有任何牵连,甚至不认识您..”;-)
猜你喜欢
  • 2015-09-29
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
相关资源
最近更新 更多