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

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

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

Поиск процесса на c++ C++
C++ Проверка процесса
C++ завершение старого процесса
Распаралеливание процесса. C++
C++ Как узнать Handle или PID процесса, зная его имя и класс?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
 Аватар для kazak
3029 / 2350 / 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 строке.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 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)
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 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
а если у меня несколько процессов с таким именем то как узнать все их пиды?
Xantrax
16 / 16 / 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;
}
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
13.04.2013, 22:56     Узнать PID процесса #16
Вот смотри накидал проект на скорую руку , вводишь название процеса и выдаётся пид , причём если с таким именем найденно несколько процессов , то все их пиды покажит.
Вложения
Тип файла: rar Project1.rar (107.6 Кб, 45 просмотров)
Xantrax
16 / 16 / 1
Регистрация: 28.11.2012
Сообщений: 328
13.04.2013, 23:09     Узнать PID процесса #17
Игорь, мне зачем нужна программа?
Меня волнует строчка в которой сравнивается имя процесса (AProcessName) и значение структуры PROCESSENTRY32 характеризующее имя текущего процесса (получается с помощью ProcessEntry.szExeFile). Так вот, у меня не совпадение форматов данных.
Хорошо, давайте сделаем как написано у вас в main.cpp
C++
1
2
3
4
5
6
if(strcmp(ProcessEntry.szExeFile,AProcessName)==0)
        {
            pid = ProcessEntry.th32ProcessID;
            CloseHandle(pHandle);
            return pid;
        }
Тогда ошибка такая: cannot convert parameter 2 from 'WCHAR *' to 'const char *
Как мне разобраться с этой бедой?
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
13.04.2013, 23:12     Узнать PID процесса #18
В программе всё есть - отрывай и изучай , но если -

Цитата Сообщение от Xantrax Посмотреть сообщение
Игорь, мне зачем нужна программа?
отписываюсь от темы.
Xantrax
16 / 16 / 1
Регистрация: 28.11.2012
Сообщений: 328
13.04.2013, 23:20     Узнать PID процесса #19
Игорь, с чего вы взяли, что я не посмотрел вашу программу?
Я же привел пример того блока программы, который меня интересует переделанный на ваш лад (пример). Но с ним у меня тоже проблема форматов..
Функция не может сконвертировать указатель типа WCHAR в указатель типа const char...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2013, 23:26     Узнать PID процесса
Еще ссылки по теме:

Запуск процесса C++
C++ Узнать id родителя процесса
C++ Запуск процесса из С++

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

Или воспользуйтесь поиском по форуму:
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
13.04.2013, 23:26     Узнать PID процесса #20
Цитата Сообщение от Xantrax Посмотреть сообщение
Функция не может сконвертировать указатель типа WCHAR в указатель типа const char...
сконвертируйте за неё (только не указатель, а соберите новые данные типа char*) из WCHAR и скормите их функции
Yandex
Объявления
13.04.2013, 23:26     Узнать PID процесса
Ответ Создать тему
Опции темы

Текущее время: 21:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru