Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/187: Рейтинг темы: голосов - 187, средняя оценка - 4.72
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
1

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

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

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, как узнать PID процесса зная его имя (например explorer'a)!!! Пол интернета перерыл, функции все не рабочие.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2010, 23:28
Ответы с готовыми решениями:

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

Получить имя или pid родительского процесса
Имеется имя файла И pid процесса. Нужно узнать имя файла ИЛИ pid его родителя Добавлено через 3...

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

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

26
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
28.06.2010, 09:45 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;
}
Или вот еще...
1
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
28.06.2010, 09:47 3
За основу можно взять допустим это: http://msdn.microsoft.com/en-u... S.85).aspx
0
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
28.06.2010, 16:20  [ТС] 4
Цитата Сообщение от uggway Посмотреть сообщение
Ну например так:
Все скопировал, при компиляции выдал две ошибки
[BCC32 Error] File1.cpp(14): E2108 Improper use of typedef 'DWORD'
[BCC32 Error] File1.cpp(14): E2379 Statement missing ;
Все #include я добавил!!!
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
29.06.2010, 08:34 5
А что у нас за компилятор такой?

Добавь еще
C++
1
typedef unsigned long       DWORD;
0
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
29.06.2010, 18:40  [ТС] 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
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
29.06.2010, 21:05 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");
4
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
29.06.2010, 21:42  [ТС] 8
Большое спасибо, все заработало!!!
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 8
17.08.2010, 18:09 9
Помогите плз. билдер с++ 6 пишет:

[C++ Error] Unit1.cpp(22): E2096 Illegal structure operation //на операцию "==" в 14 строке.
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
17.08.2010, 18:13 10
Если Вы скопировали код из 7-го сообщения тогда попробуйте:
C
1
if (strcmp(ProcessEntry.szExeFile, AProcessName) == 0)
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 8
18.08.2010, 02:29 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)
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
18.08.2010, 07:10 12
Тогда:
C
1
if (strcmp(ProcessEntry.szExeFile, AProcessName.c_str()) == 0)
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 8
20.08.2010, 19:44 13
спасибо ... заработало )
0
3 / 3 / 0
Регистрация: 13.10.2011
Сообщений: 29
27.04.2012, 15:18 14
а если у меня несколько процессов с таким именем то как узнать все их пиды?
0
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
13.04.2013, 22:24 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;
}
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
13.04.2013, 22:56 16
Вот смотри накидал проект на скорую руку , вводишь название процеса и выдаётся пид , причём если с таким именем найденно несколько процессов , то все их пиды покажит.
Вложения
Тип файла: rar Project1.rar (107.6 Кб, 124 просмотров)
1
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
13.04.2013, 23:09 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 *
Как мне разобраться с этой бедой?
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
13.04.2013, 23:12 18
В программе всё есть - отрывай и изучай , но если -

Цитата Сообщение от Xantrax Посмотреть сообщение
Игорь, мне зачем нужна программа?
отписываюсь от темы.
0
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
13.04.2013, 23:20 19
Игорь, с чего вы взяли, что я не посмотрел вашу программу?
Я же привел пример того блока программы, который меня интересует переделанный на ваш лад (пример). Но с ним у меня тоже проблема форматов..
Функция не может сконвертировать указатель типа WCHAR в указатель типа const char...
0
390 / 365 / 111
Регистрация: 03.02.2013
Сообщений: 1,120
13.04.2013, 23:26 20
Цитата Сообщение от Xantrax Посмотреть сообщение
Функция не может сконвертировать указатель типа WCHAR в указатель типа const char...
сконвертируйте за неё (только не указатель, а соберите новые данные типа char*) из WCHAR и скормите их функции
0
13.04.2013, 23:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2013, 23:26
Помогаю со студенческими работами здесь

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

Библиотеки процесса, защита от изменения процесса
Здраствуйте. 1) Как можно получить список библиотек (dll, asi), которые уже загружены в процесс...

Узнать PID процесса
Так я узнаю PID процесса, - unsigned long PIDByName(AnsiString AProcessName) { HANDLE pHandle...

Как узнать состояние процесса по PID?
Доброго времени суток, подскажите как можно узнать запущен ли процесс или не запущен если я знаю...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru