这是我现在如何做的一个例子:

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/

10-11 01:36