这是我现在如何做的一个例子:
var
Client : String;
Handle : Integer;
begin
Client := 'Window Name';
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
end;
我宁愿用它的exe名称捕获进程的句柄......
这可能吗?
最佳答案
您可以使用 ProcessInfo :
var
ProcessInfo : TProcessInfo;
Process : TProcessItem;
PID: Cardinal;
ProcessHandle : THandle;
begin
ProcessInfo := TProcessInfo.Create(nil);
try
Process := ProcessInfo.RunningProcesses.FindByName('Notepad.exe');
if Assigned(Process) then
begin
PID := Process.ProcessID;
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
if ProcessHandle > 0 then
try
{Add your code here}
finally
CloseHandle(ProcessHandle);
end;
end;
finally
ProcessInfo.Free;
end;
end;
如果您不喜欢使用第三方组件,您可以研究 ProcessInfo 的源代码以了解它如何检索正在运行的进程列表及其属性。基本上,它的大部分功能都依赖于 Windows 工具帮助 API。
关于Delphi 获取一个EXE的句柄,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4843181/