На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> PID моего процесса , узнать PID моего процесса
    Здравствуйте.
    Проблема в следующем есть запускаемый процесс, но в диспетчере задач, может быть несколько процессов с таким именем. Как мне определить PID нужного процесса, например зная размещение exe файла ?
      Вначале узнать handle, а потом GetWindowThreadProcessId.
        Taking a Snapshot and Viewing Processes
        это вообще.

        а в частности
        Цитата vodovorot @
        есть запускаемый процесс

        как запускаете?
        просто есть такой удобный способ запуска CreateProcess(), который сразу возвращает PID.
        Сообщение отредактировано: arj99 -
          Запускаю через ShellExecute(Handle,nil,Pchar('\files\myprogram.exe'),nil, nil, SW_RESTORE).
          Цитата
          просто есть такой удобный способ запуска CreateProcess(), который сразу возвращает PID.

          Если не сложно можете привести пример использования ?
          На MSDN не совсем понятно...
            Цитата vodovorot @
            На MSDN не совсем понятно...

            Что именно вызывает затруднения ?
              ExpandedWrap disabled
                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 в случае успеха.
              Кстати, отсюда же можно запомнить и дескриптор процесса, если нужен. Потом только не забыть закрыть по ненадобности.
                Цитата arj99 @
                Потом только не забыть закрыть по ненадобности.


                PID ведь не надо закрывать, только дескриптор. Или я ошибаюсь?
                  Цитата arj99 @
                  Кстати, отсюда же можно запомнить и дескриптор процесса, если нужен.
                  Потом только не забыть закрыть его (дескриптор) по ненадобности.
                  Сообщение отредактировано: arj99 -
                    Цитата Демо @
                    PID ведь не надо закрывать, только дескриптор. Или я ошибаюсь?

                    PID всего навсего "указатель, индекс", чей надо искать Handle.
                    Они генерируются системой авоматически и могут, даже повторяться (если процесс с данным PID уже закрыт).
                    Соответственно, за нами следит (создает, уничтожает) сама система, и мы здесь как "не пришей кобыле хвост" :)
                      GetCurrentProcessId
                        Цитата vodovorot @
                        Как мне определить PID нужного процесса, например зная размещение exe файла ?


                        Если подходить с этой стороны, то нужно искать нужный процесс методом перебора CreateToolHelp32Snapshot.

                        А PID вообще зачем нужен-то?
                        Сообщение отредактировано: Демо -
                          Цитата Riply @
                          Они генерируются системой авоматически и могут, даже повторяться (если процесс с данным PID уже закрыт).

                          Увы, не могут в рамках текущего аптайма

                          Добавлено
                          Цитата Демо @
                          А PID вообще зачем нужен-то?

                          Вещь в себе - уникальный идентификатор процесса. (Ну это в MS так договорились)
                            Цитата Rouse_ @
                            Вещь в себе - уникальный идентификатор процесса. (Ну это в MS так договорились)

                            ___________


                            Я имел ввиду - автору-то зачем? Для удовлетворения любопытства?
                              если тебе свой пид надо то используй GetCurrentProcessID
                                Всем спасибо за помощь, особенно, arj99 разобрался с CreateProcess :)
                                Сообщение отредактировано: vodovorot -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0470 ]   [ 17 queries used ]   [ Generated: 28.03.24, 17:00 GMT ]