如何通过名称终止进程,而不是当前进程?

问题描述 投票:1回答:1

在Delphi 2007中,我使用以下代码按名称终止过程。它有效,但是我想终止所有进程,但要使用当前应用程序之一的名称。我的目标是关闭我的应用程序的所有重复过程,只运行当前的一个。

function closeProc(pname : 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(pname)) then
        begin
          Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
        end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
CloseHandle(FSnapshotHandle);
end;
delphi delphi-2007
1个回答
2
投票

枚举时,将FProcessEntry32.th32ProcessIDGetCurrentProcessId进行比较。如果这些值匹配,则您正在枚举的过程就是调用过程,您可以跳过终止代码。

© www.soinside.com 2019 - 2024. All rights reserved.