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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.93
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
06.08.2012, 20:00     Как узнать Handle или PID процесса, зная его имя и класс? #1
Как узнать Handle или PID процесса, зная его имя и класс?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ExpressS
 Аватар для ExpressS
5 / 8 / 0
Регистрация: 30.07.2012
Сообщений: 235
06.08.2012, 21:59     Как узнать Handle или PID процесса, зная его имя и класс? #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
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
07.08.2012, 09:32  [ТС]     Как узнать Handle или PID процесса, зная его имя и класс? #3
Может я что-то путаю, но по-мойму FindWindow возвращает дескриптор окна(HWND), а не HANDLE.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.08.2012, 10:33     Как узнать Handle или PID процесса, зная его имя и класс? #4
Цитата Сообщение от MaxxximyM Посмотреть сообщение
Может я что-то путаю
окно с процессом? или что такое "класс процесса"?
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
07.08.2012, 10:35  [ТС]     Как узнать Handle или PID процесса, зная его имя и класс? #5
В spy++ из Visual Studio можно посмотреть класс........окна наверно.
Значит надо найти PID или HANDLE окна. Как?
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
07.08.2012, 14:40     Как узнать Handle или PID процесса, зная его имя и класс? #6
Стоп.
HANDLE окна - это не то же самое, что HANDLE процесса. Что именно ты ищешь?
Ну и PID - имеет смысл только для процесса.
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
07.08.2012, 15:05  [ТС]     Как узнать Handle или PID процесса, зная его имя и класс? #7
Запутался.
Так, нужно найти handle или PID ПРОЦЕССА.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
07.08.2012, 15:23     Как узнать Handle или PID процесса, зная его имя и класс? #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;
};
писал давно, поэтому код коряв даже на мой взгляд. Но рабоч.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.08.2012, 15:28     Как узнать Handle или PID процесса, зная его имя и класс? #9
Цитата Сообщение от MaxxximyM Посмотреть сообщение
Запутался.
Так, нужно найти handle или PID ПРОЦЕССА.
ну, тогда не "зная его имя и класс", а что-нибудь другое. имя и класс его главного окна? тогда юзай GetWindowThreadProcessID() (как найти окно тебе уже рассказали)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2012, 16:10     Как узнать Handle или PID процесса, зная его имя и класс?
Еще ссылки по теме:

C++ Есть ли способ, зная ссылку на класс, использовать его значения без запроса по ссылке?
Где должен находиться файл, чтоб программа его открыла, или как указывать его имя? C++
Как узнать имя exe зная его id (WinApi,c++) C++

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
07.08.2012, 16:10     Как узнать Handle или PID процесса, зная его имя и класс? #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;
};
Yandex
Объявления
07.08.2012, 16:10     Как узнать Handle или PID процесса, зная его имя и класс?
Ответ Создать тему
Опции темы

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