Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 71, средняя оценка - 4.80
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
#1

Узнать PID процесса - C++

27.06.2010, 23:28. Просмотров 9512. Ответов 26
Метки нет (Все метки)

Подскажите пожалуйста, как узнать PID процесса зная его имя (например explorer'a)!!! Пол интернета перерыл, функции все не рабочие.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2010, 23:28     Узнать PID процесса
Посмотрите здесь:

Как узнать Handle или PID процесса, зная его имя и класс? - C++
Как узнать Handle или PID процесса, зная его имя и класс?

Узнать id родителя процесса - C++
Как узнать id родителя процесса? Нашел информацию что можно вывести из структуры PROCESSENTRY32. Можно пример? Гугл выдает только как...

Как узнать состояние дочернего процесса - C++
Здравствуйте. Есть приложение, которое запускает разные дочерние процессы. Мне нужно узнавать, когда дочернее приложение завершилось. Я бы...

Как узнать имя запущенного процесса - C++
Как узнать имя запущенного процесса и записать его имя в строку (LPWSTR)?

Возможно ли безопасно упаковать в одну переменную pid и tid в windows? - C++
Какой диапазон имеют валидные значения pid и tid?

Запуск процесса из С++ - C++
Visual Studio 2013 Пишу код для открытия блокнота: #include <stdio.h> #include <windows.h> #include <iostream> using...

Распаралеливание процесса. - C++
Здравствуйте! у меня небольшая проблема. Небольшая преамбула: сейчас я пишу консольную игру(тапками не кидаться) по мотивам фильма...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
28.06.2010, 09:45     Узнать PID процесса #2
Плохо рыл... Да и все функции наверняка рабочии
Ну например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <windows.h>
#include <string.h>
#include <Tlhelp32.h>
 
 
DWORD PIDByName(WCHAR * AProcessName)
{
  HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PROCESSENTRY32 ProcessEntry;
  DWORD pid;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(pHandle, &ProcessEntry);
 
  while (Loop)
    {
      if (wcsstr(ProcessEntry.szExeFile, AProcessName))
      {
          pid = ProcessEntry.th32ProcessID;
          CloseHandle(pHandle);
          return pid;
      }
      Loop = Process32Next(pHandle, &ProcessEntry);
    }
    return 0;
}
//Используем
 
int main(void)
{
         DWORD pid;
         pid = PIDByName(L"explorer.exe");
 
         return 0;
}
Или вот еще...
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
28.06.2010, 09:47     Узнать PID процесса #3
За основу можно взять допустим это: http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
28.06.2010, 16:20  [ТС]     Узнать PID процесса #4
Цитата Сообщение от uggway Посмотреть сообщение
Ну например так:
Все скопировал, при компиляции выдал две ошибки
[BCC32 Error] File1.cpp(14): E2108 Improper use of typedef 'DWORD'
[BCC32 Error] File1.cpp(14): E2379 Statement missing ;
Все #include я добавил!!!
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
29.06.2010, 08:34     Узнать PID процесса #5
А что у нас за компилятор такой?

Добавь еще
C++
1
typedef unsigned long       DWORD;
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
29.06.2010, 18:40  [ТС]     Узнать PID процесса #6
Цитата Сообщение от uggway Посмотреть сообщение
Добавь еще
Это я добавил! Получил ещё две ошибки
[BCC32 Error] File1.cpp(21): E2034 Cannot convert 'char *' to 'const wchar_t *'
[BCC32 Error] File1.cpp(21): E2342 Type mismatch in parameter '__s1' (wanted 'const wchar_t *', got 'char *')
Программирую в CodeGear RAD Studio C++Builder 2007
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
29.06.2010, 21:05     Узнать PID процесса #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Специальная версия для builder-a
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <Tlhelp32.h>
 
unsigned long PIDByName(AnsiString AProcessName)
{
  HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PROCESSENTRY32 ProcessEntry;
  unsigned long pid;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(pHandle, &ProcessEntry);
 
  while (Loop)
    {
      if (ProcessEntry.szExeFile == AProcessName)
      {
                  pid = ProcessEntry.th32ProcessID;
                  CloseHandle(pHandle);
                  return pid;
      }
      Loop = Process32Next(pHandle, &ProcessEntry);
    }
    return 0;
}
Применяется :
C++
1
pid = PIDByName("explorer.exe");
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
29.06.2010, 21:42  [ТС]     Узнать PID процесса #8
Большое спасибо, все заработало!!!
cupuyc.
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 8
17.08.2010, 18:09     Узнать PID процесса #9
Помогите плз. билдер с++ 6 пишет:

[C++ Error] Unit1.cpp(22): E2096 Illegal structure operation //на операцию "==" в 14 строке.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
17.08.2010, 18:13     Узнать PID процесса #10
Если Вы скопировали код из 7-го сообщения тогда попробуйте:
C
1
if (strcmp(ProcessEntry.szExeFile, AProcessName) == 0)
cupuyc.
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 8
18.08.2010, 02:29     Узнать PID процесса #11
теперь:
[C++ Error] Unit1.cpp(24): E2034 Cannot convert 'AnsiString' to 'const char *'
[C++ Error] Unit1.cpp(24): E2342 Type mismatch in parameter '__s2' (wanted 'const char *', got 'AnsiString')
в этой строчке
C++
1
    if (strcmp(ProcessEntry.szExeFile, AProcessName) == 0)
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
18.08.2010, 07:10     Узнать PID процесса #12
Тогда:
C
1
if (strcmp(ProcessEntry.szExeFile, AProcessName.c_str()) == 0)
cupuyc.
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 8
20.08.2010, 19:44     Узнать PID процесса #13
спасибо ... заработало )
hell_gate666
3 / 3 / 1
Регистрация: 13.10.2011
Сообщений: 29
27.04.2012, 15:18     Узнать PID процесса #14
а если у меня несколько процессов с таким именем то как узнать все их пиды?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2013, 22:24     Узнать PID процесса
Еще ссылки по теме:

Запуск процесса - C++
Здравствуйте! Как получить данные из потока stderr и стандартного потока вывода процесса? Вот код: char t1 = &quot;ls&quot;; ...

Проверка процесса - C++
Мне нужен исходный код проверяющий работоспособность процесса , не как обычно из диспечера задач по имени а по пути фаила запуска ...

Отладка порожденного процесса - C++
Очень сильно не хватает эрудированности по этой теме. Делаю вот так: Пытаюсь запустить CreateProcess'ом процесс, процесс запускается,...

завершение старого процесса - C++
Как можно выполнить завершение одного процесса, при открытии другого? Допустим завершения програамы при ...

Поиск процесса по имени - C++
Нужно написать функцию которая будет искать запущен ли процесс (имя процесса за ранние известно).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Xantrax
17 / 17 / 1
Регистрация: 28.11.2012
Сообщений: 328
13.04.2013, 22:24     Узнать PID процесса #15
Что-то запустался я во всех этих char, WCHAR, wchar_t, L" ".
Подскажите пожалуйста, как исправить ошибку:wcsstr: none of the 2 overloads could convert all the argument types
в коде получения PID программы по имени:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DWORD CMainPWDlg::PidByName(WCHAR *AProcessName)
{
    HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32 ProcessEntry;
    DWORD pid;
    ProcessEntry.dwSize = sizeof(ProcessEntry);
    BOOL Loop = Process32First(pHandle,&ProcessEntry);
    while(Loop)
    {
        if(wcsstr(ProcessEntry.szExeFile,AProcessName))
        {
            pid = ProcessEntry.th32ProcessID;
            CloseHandle(pHandle);
            return pid;
        }
        Loop = Process32Next(pHandle, &ProcessEntry);
    }
    return 0;
}
Yandex
Объявления
13.04.2013, 22:24     Узнать PID процесса
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru