Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > ID Процесса


Автор: Guest 28.12.2004, 15:48
Как узнать ID процесса. В поиск или в DRKB посылать не надо, там есть только, как получит список всех процессов и их ID'ы. Мне нужно для конкретного процесса.

Автор: Guest 28.12.2004, 17:32
Цитата

конкретного процесса

а что ты знаешь о нем?

Автор: Rennigth 28.12.2004, 17:34
забыл войти...
Цитата

конкретного процесса

а что ты знаешь о нем?

Автор: Sergey89 28.12.2004, 17:39
Знаю его название

Автор: Rennigth 28.12.2004, 17:48
Цитата

  там есть только, как получит список всех процессов и их ID'ы.

ну а чем тебе не нравиться способ по выборке из списка нужного тебе процесса?
Добавлено @ 17:50
по идеи даже если бы и была стандартная функция получения ID процесса по имени
она бы все равно бы на 100% не работала потому что одновремено может быть запущено несколько процессов с одинаковым именем...

Автор: Sergey89 28.12.2004, 18:22
Цитата(Rennigth @ 28.12.2004, 17:48)
по идеи даже если бы и была стандартная функция получения ID процесса по имени
она бы все равно бы на 100% не работала потому что одновремено может быть запущено несколько процессов с одинаковым именем...

Ну а если не внедрятся в тонкости. Мне не нужно выбрать процесс мне нужен один конкретный!

Автор: Rennigth 28.12.2004, 18:39
Цитата

Мне не нужно выбрать процесс мне нужен один конкретный!

ну покрайней мере я другого способа незнаю чем так:

вернет тебе ID процесса по его имени (хоть и выбором)

Код


Uses  tlhelp32;
...

function GetIDProcess(AName : PChar ) : Cardinal; StdCall;
var
lSnapHandle, lProcHandle: THandle;
ProcStruct : PROCESSENTRY32;
lProcessPath : Pchar;
PID : Cardinal;
begin
Result := 0;
lSnapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if lSnapHandle = 0 then
  exit;
ProcStruct.dwSize := sizeof( PROCESSENTRY32 );
if Process32First(lSnapHandle, ProcStruct) then
begin
  try
    repeat
      lProcessPath := ProcStruct.szExeFile;
      if uppercase(lProcessPath) = uppercase(AName) then
      begin
        PID := ProcStruct.th32ProcessID;
        Result := PID;
        Break;
      end;
    until not Process32Next(lSnapHandle, ProcStruct);
  finally
    CloseHandle(lSnapHandle);
  end;
end;
end;


Автор: Sergey89 28.12.2004, 19:37
БИГ Сэнкс ;)

Автор: p0s0l 28.12.2004, 23:27
Перенесенно из раздела Delphi

Автор: Stadler 29.12.2004, 13:44
Rennigth
Странно, а у меня не получилось...
[Error] Unit1.pas(34): Undeclared identifier: 'PROCESSENTRY32'
[Error] Unit1.pas(39): Undeclared identifier: 'CreateToolhelp32Snapshot'
[Error] Unit1.pas(39): Undeclared identifier: 'TH32CS_SNAPALL'
[Error] Unit1.pas(42): Missing operator or semicolon
[Error] Unit1.pas(43): Undeclared identifier: 'Process32First'
Добавлено @ 13:45
Rennigth
Пардон... кое-что забыл smile

Автор: Sergey89 29.12.2004, 16:34
В uses добавь tlhelp32

Автор: dm9 30.12.2004, 00:01
В дополнение:

Код
procedure TForm1.Button2Click(Sender: TObject);
var pProcID: ^DWORD;
begin
 GetMem(pProcID, SizeOf(DWORD));
 GetWindowThreadProcessId(FindWindow(nil, PChar(Edit2.Text)), pProcID);
 Edit1.Text := IntToStr (pProcID^);
end;


Вернёт в Edit1.Text Id процесса, у которого есть окно с названием Edit2.Text

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)