Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.174.248] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здравствуйте.
Проблема в следующем есть запускаемый процесс, но в диспетчере задач, может быть несколько процессов с таким именем. Как мне определить PID нужного процесса, например зная размещение exe файла ? |
Сообщ.
#2
,
|
|
|
Вначале узнать handle, а потом GetWindowThreadProcessId.
|
Сообщ.
#3
,
|
|
|
Taking a Snapshot and Viewing Processes
это вообще. а в частности Цитата vodovorot @ есть запускаемый процесс как запускаете? просто есть такой удобный способ запуска CreateProcess(), который сразу возвращает PID. |
Сообщ.
#4
,
|
|
|
Запускаю через ShellExecute(Handle,nil,Pchar('\files\myprogram.exe'),nil, nil, SW_RESTORE).
Цитата просто есть такой удобный способ запуска CreateProcess(), который сразу возвращает PID. Если не сложно можете привести пример использования ? На MSDN не совсем понятно... |
Сообщ.
#5
,
|
|
|
Цитата vodovorot @ На MSDN не совсем понятно... Что именно вызывает затруднения ? |
Сообщ.
#6
,
|
|
|
function StartProccess(const ExecutableName: string): DWORD; var StartupInfo: TStartupInfo; ProccessInfo: TProcessInformation; begin Result := 0; FillChar(StartupInfo, sizeof(StartupInfo), 0); with StartupInfo do begin cb := sizeof(StartupInfo); wShowWindow := SW_RESTORE; end; FillChar(ProccessInfo, sizeof(ProccessInfo), 0); if (CreateProcess(PChar(ExecutableName), nil, nil, nil, false, 0, nil, nil, StartupInfo, ProccessInfo)) then begin Result := ProccessInfo.dwProcessId; CloseHandle(ProccessInfo.hProcess); CloseHandle(ProccessInfo.hThread); end; end; Не тестировал, но как-то так... Вернет 0 если запустить процесс не удалось либо его PID в случае успеха. Кстати, отсюда же можно запомнить и дескриптор процесса, если нужен. Потом только не забыть закрыть по ненадобности. |
Сообщ.
#7
,
|
|
|
Цитата arj99 @ Потом только не забыть закрыть по ненадобности. PID ведь не надо закрывать, только дескриптор. Или я ошибаюсь? |
Сообщ.
#8
,
|
|
|
Цитата arj99 @ Потом только не забыть закрыть его (дескриптор) по ненадобности. Кстати, отсюда же можно запомнить и дескриптор процесса, если нужен. |
Сообщ.
#9
,
|
|
|
Цитата Демо @ PID ведь не надо закрывать, только дескриптор. Или я ошибаюсь? PID всего навсего "указатель, индекс", чей надо искать Handle. Они генерируются системой авоматически и могут, даже повторяться (если процесс с данным PID уже закрыт). Соответственно, за нами следит (создает, уничтожает) сама система, и мы здесь как "не пришей кобыле хвост" |
Сообщ.
#10
,
|
|
|
GetCurrentProcessId
|
Сообщ.
#11
,
|
|
|
Цитата vodovorot @ Как мне определить PID нужного процесса, например зная размещение exe файла ? Если подходить с этой стороны, то нужно искать нужный процесс методом перебора CreateToolHelp32Snapshot. А PID вообще зачем нужен-то? |
Сообщ.
#12
,
|
|
|
Цитата Riply @ Они генерируются системой авоматически и могут, даже повторяться (если процесс с данным PID уже закрыт). Увы, не могут в рамках текущего аптайма Добавлено Цитата Демо @ А PID вообще зачем нужен-то? Вещь в себе - уникальный идентификатор процесса. (Ну это в MS так договорились) |
Сообщ.
#13
,
|
|
|
Цитата Rouse_ @ Вещь в себе - уникальный идентификатор процесса. (Ну это в MS так договорились) ___________ Я имел ввиду - автору-то зачем? Для удовлетворения любопытства? |
Сообщ.
#14
,
|
|
|
если тебе свой пид надо то используй GetCurrentProcessID
|
Сообщ.
#15
,
|
|
|
Всем спасибо за помощь, особенно, arj99 разобрался с CreateProcess
|