Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.93
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
#1

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

06.08.2012, 20:00. Просмотров 6388. Ответов 9
Метки нет (Все метки)

Как узнать Handle или PID процесса, зная его имя и класс?
http://www.cyberforum.ru/cpp-beginners/thread1983227.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2012, 20:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как узнать Handle или PID процесса, зная его имя и класс? (C++):

Как узнать имя exe зная его id (WinApi,c++)
Пишу программу отслеживающие активность пользователя. Проблема стоит в том что...

Узнать PID процесса
Подскажите пожалуйста, как узнать PID процесса зная его имя (например...

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

Как можно объявить класс, заранее не зная его тип template.
Класс: template <class type> class My { private: int n; double sum;...

Где должен находиться файл, чтоб программа его открыла, или как указывать его имя?
Пытаюсь работать с файлами. Объясните, пожалуйста, где должен находиться файл,...

9
ExpressS
5 / 8 / 2
Регистрация: 30.07.2012
Сообщений: 235
06.08.2012, 21:59 #2
Цитата Сообщение от MaxxximyM Посмотреть сообщение
Как узнать Handle процесса, зная его имя и класс?
Описание:
function FindWindow(ClassName, WindowName: PChar): HWnd;

Находит pодительское окно веpхнего уpовня с совпадающими ClassName и WindowName. Не осуществляет поиск дочеpних окон.

Паpаметpы:
ClassName: Имя класса окна (заканчивающееся пустым символом, nil - если все классы).
WindowName: Текстовый заголовок окна или 0, если все окна.

Возвpащаемое значение:
Описатель окна; 0 - если такого окна нет.
Материал взят из:
Русская спpавка по Windows API
0
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
07.08.2012, 09:32  [ТС] #3
Может я что-то путаю, но по-мойму FindWindow возвращает дескриптор окна(HWND), а не HANDLE.
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.08.2012, 10:33 #4
Цитата Сообщение от MaxxximyM Посмотреть сообщение
Может я что-то путаю
окно с процессом? или что такое "класс процесса"?
0
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
07.08.2012, 10:35  [ТС] #5
В spy++ из Visual Studio можно посмотреть класс........окна наверно.
Значит надо найти PID или HANDLE окна. Как?
0
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
07.08.2012, 14:40 #6
Стоп.
HANDLE окна - это не то же самое, что HANDLE процесса. Что именно ты ищешь?
Ну и PID - имеет смысл только для процесса.
0
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
07.08.2012, 15:05  [ТС] #7
Запутался.
Так, нужно найти handle или PID ПРОЦЕССА.
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
07.08.2012, 15:23 #8
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
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h> 
#include <Windows.h> 
#include <Winnt.h> 
//Здесь определена структура PROCESSENTRY32 и функция CreateToolhelp32Snapshot
#include <tlhelp32.h>
 FILE *f;
bool SpisokProcessov ()  {
 
 HANDLE hProcessSnap;
 PROCESSENTRY32 pe32;
 
 //Это мы находим дескриптор снимка процессов
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 
 
 int i= 0;
 
 //
 
 Process32First(hProcessSnap, &pe32);
 printf ("%d  PID= %x  %s\n",++i, pe32.th32ProcessID, pe32.szExeFile);
 fprintf(f,"%d  PID= %x   %s \n",i, pe32.th32ProcessID, pe32.szExeFile);
 while (Process32Next(hProcessSnap, &pe32)) {
  printf ("%d  PID= %x  %s\n",++i, pe32.th32ProcessID, pe32.szExeFile);
  fprintf(f,"%d  PID= %x   %s \n",i, pe32.th32ProcessID, pe32.szExeFile);
 } 
 
 
 CloseHandle(hProcessSnap);
 return true;
}
 
 
 
 int main () {
 f = fopen("rezultat.txt","wb");
 
 //Если циклом не хочешь, надо закомментить эту херь
 //while (1) 
  SpisokProcessov ();
 fclose (f);
  getchar ();
  return 0;
 }
ЭТо вот PID-ы всех процессов. Сравнивай имена с нужными и будет тебе счастье


А вот хэндл процесса по имени
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h> 
#include <Windows.h> 
#include <tlhelp32.h>
 
HANDLE HandleProcessa (char* );
 
int main () {
 int i= 0;
 char ima_processa [1024]; 
 printf ("vvodi ima processa \n");
 for (;        (ima_processa [i]= getchar ())!= 10; i++) { }
  ima_processa [i]= 0;
 
 HANDLE hProcess= HandleProcessa (ima_processa);
 
 printf ("Handle processa %s raven %x\n",ima_processa, hProcess);
 
 CloseHandle (hProcess);
 system ("PAUSE");
 return 0;
}
 
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
 
 
HANDLE HandleProcessa (char* szFilename) {
 
 HANDLE hProcessSnap;
 PROCESSENTRY32 pe32;
 
 //Это мы находим дескриптор снимка процессов
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 
 
 Process32First(hProcessSnap, &pe32);
 while (lstrcmpi(pe32.szExeFile, szFilename)) // ищем нужный процесс. Его PID будет в поле pe32.th32ProcessID              
 {
  if (!Process32Next(hProcessSnap, &pe32)) { // перечисляем процессы
   CloseHandle(hProcessSnap);
   return FALSE;
  } 
 };
 
 
 CloseHandle(hProcessSnap);
 
 //Тот самый хэрдл, который ищем
 HANDLE hProcess;
 
 
 //Функция OpenProcess возвращает дескриптор процесса, а третий принимаемый ею параметр- идентификатор процесса
 // (PID)
 
//Внимание! Не для всех процессов возвращается хэндл, если права доступа PROCESS_ALL_ACCESS
//Приходится использовать только для чтения
 hProcess = OpenProcess(PROCESS_VM_READ, 0, pe32.th32ProcessID);
 
 return hProcess;
};
писал давно, поэтому код коряв даже на мой взгляд. Но рабоч.
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.08.2012, 15:28 #9
Цитата Сообщение от MaxxximyM Посмотреть сообщение
Запутался.
Так, нужно найти handle или PID ПРОЦЕССА.
ну, тогда не "зная его имя и класс", а что-нибудь другое. имя и класс его главного окна? тогда юзай GetWindowThreadProcessID() (как найти окно тебе уже рассказали)
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
07.08.2012, 16:10 #10
А вот кому хэндл процесса через окно!
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
35
36
37
38
39
40
41
42
43
44
#include <stdio.h> 
#include <Windows.h> 
 
HANDLE HProcessa_cherez_ima_okna ();
 
 
int main () {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 HANDLE temp; 
 temp= HProcessa_cherez_ima_okna();
 
 printf ("хэндл процесса равен %x\n", (unsigned int)temp);
 system ("PAUSE");
 return 0;
}
 
 
HANDLE HProcessa_cherez_ima_okna () {
 
  HWND hokna;
  
  //Тут будет храниться PID процесса
  DWORD ProcessId;
 
  hokna= FindWindow (0, "заголовок");
  if (!(hokna)) {
   printf ("не удалось найти дескриптор окна\n");
   system ("pause");
   return 0;
  }
   
  if (!(GetWindowThreadProcessId(hokna, &ProcessId))) {
   printf ("PID не найден\n");
   system ("pause");
   return 0;
  }  
 
 //Тот самый хэрдл, который ищем
 HANDLE hProcess;
 hProcess = OpenProcess(PROCESS_VM_READ, 0, ProcessId);
 return hProcess;
};
0
07.08.2012, 16:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2012, 16:10
Привет! Вот еще темы с решениями:

Как создать класс для запуска процесса и отслеживания его дальнейшего состояния
Есть задание: Create class to launch and monitor win32 process. Class...

HANDLE файла зная путь к нему
Привет всем. Подскажите с помощью какой функции можно получить HANDLE файла,...

Есть ли способ, зная ссылку на класс, использовать его значения без запроса по ссылке?
скажем есть 2 класса class ItemList { public: ItemList(); int ...

Можно ли как то запустить функцию или класс которая находится ниже чем исполняемая функция или класс?
Можно ли как то запустить функцию или класс которая находится ниже чем...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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