Kob*_*alt 3 windows delphi winapi
我正在使用以下代码来终止进程:
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;
Run Code Online (Sandbox Code Playgroud)
问题是,当我调用上述函数以永久终止时explorer.exe,Windows资源管理器终止,但之后重新启动:
KillTask('explorer.exe');
Run Code Online (Sandbox Code Playgroud)
我正在使用Delphi XE3,Delphi 7和Windows 8.
基于此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;
Run Code Online (Sandbox Code Playgroud)
我已经在Windows 7中测试了它,它可以工作,甚至不需要管理员提升.不知道其他系统怎么样(我说这至少在Windows XP上不起作用,但这只是猜测).
| 归档时间: |
|
| 查看次数: |
2416 次 |
| 最近记录: |