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

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

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

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

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

Подскажите пожалуйста, как узнать PID процесса зная его имя (например explorer'a)!!! Пол интернета перерыл, функции все не рабочие.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
3032 / 2353 / 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 строке.
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,818
Завершенные тесты: 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)
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,818
Завершенные тесты: 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
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;
}
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
13.04.2013, 22:56     Узнать PID процесса #16
Вот смотри накидал проект на скорую руку , вводишь название процеса и выдаётся пид , причём если с таким именем найденно несколько процессов , то все их пиды покажит.
Вложения
Тип файла: rar Project1.rar (107.6 Кб, 57 просмотров)
Xantrax
17 / 17 / 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 *
Как мне разобраться с этой бедой?
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
13.04.2013, 23:12     Узнать PID процесса #18
В программе всё есть - отрывай и изучай , но если -

Цитата Сообщение от Xantrax Посмотреть сообщение
Игорь, мне зачем нужна программа?
отписываюсь от темы.
Xantrax
17 / 17 / 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++ Возможно ли безопасно упаковать в одну переменную pid и tid в windows?
Как узнать имя запущенного процесса C++
Библиотеки процесса, защита от изменения процесса C++
C++ Как узнать состояние дочернего процесса

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

Или воспользуйтесь поиском по форуму:
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 процесса
Ответ Создать тему
Опции темы

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