Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2010, 18:13   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Просмотр процессов

Добрый вечер! Пишу небольшую программу, мне нужно чтобы она искала заданный мною выполняемый процесс. Подскажите какая это функция может сделать, быть может это win api функция?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 22.08.2010, 18:54   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Если задается имя процесса, то получить идентификатор можно так:
Код:
#include <windows.h>
#include <stdio.h>
#include <TlHelp32.h>
#include <conio.h>
using namespace std;

int main()
{
 HANDLE h;
 PROCESSENTRY32 pe;
 int id;
 bool bl,flag=false;
 char name[256],str[256];
 scanf("%s",name);
 
 h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 for(bl = Process32First(h, &pe); bl; bl = Process32Next(h, &pe))
 {
    strcpy(str,pe.szExeFile);
    if(strcmp(str,name)==0)
     {
      id = pe.th32ProcessID;
      CloseHandle(h);
      flag = true;
      break;      
     }
 }
 CloseHandle(h);
 if(flag) 
  printf("Process found: %s %d\n",name,id);
 else
  printf("Process not found");
 
 getch();
 return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.08.2010, 19:04   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

а еще такой вопрос, можно ли таким образом узнать полуный путь до файла этого процесса
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 22.08.2010, 20:51   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Разобрался-таки.

Код:
#include <windows.h>
#include <stdio.h>
#include <TlHelp32.h>
#include <conio.h>
#include <string.h>
#include <psapi.h>
using namespace std;

int main()
{
 HANDLE h,hp;
 PROCESSENTRY32 pe;
 int id;
 bool bl,flag=false;
 char name[256],str[256];
 char path[MAX_PATH];
 DWORD dw;
 HMODULE hmod;

 scanf("%s",name);

 h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPMODULE,0);

 for(bl = Process32First(h, &pe); bl; bl = Process32Next(h, &pe))
 {
    strcpy(str,pe.szExeFile);
    if(strcmp(str,name)==0)
     {
      printf("Process found: %s\n",str);
      hp = OpenProcess(PROCESS_QUERY_INFORMATION |        PROCESS_VM_READ,false,pe.th32ProcessID);
      EnumProcessModules(hp, &hmod,sizeof(hmod),&dw);  // получаем первый модуль, связанный с процессом, то есть сам exe-файл
      GetModuleFileNameEx(hp, hmod, path, MAX_PATH);   // получаем путь к модулю

      printf("path: %s\n",path);

      CloseHandle(hp);
      CloseHandle(h);
      flag = true;
      break;      
     }
 }
 CloseHandle(h);
 if(!flag) printf("Process not found");
 
 getch();
 return 0;
}
Нужно прилинковать модуль psapi.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.08.2010, 19:09   #5
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

нужно скачивать библиотеку или именно psapi.h?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 24.08.2010, 19:12   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Насколько знаю, она стандартная, и должна быть в системной папке. Ну, или в одной из папок компилятора (например, в Dev-Cpp она среди стандартных либ - libpsapi.a).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.08.2010, 19:17   #7
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

спасибо еще раз
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 29.08.2010, 11:46   #8
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Код:
int search()
{
//=============================================================================================================
//			описание данных
//=============================================================================================================
	HANDLE h,hp;
	PROCESSENTRY32 pe;
	int id;
	bool bl;
	char name_av[256],str[256];
	char path[MAX_PATH];
	DWORD dw;
	HMODULE hmod;
	
	h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPMODULE,0);
	strcpy(name_av,"AIMP2.exe");

//=============================================================================================================
//			просмотр всех процессов и поиск нужного
//=============================================================================================================
	for(bl = Process32First(h, &pe); bl; bl = Process32Next(h, &pe))
	{
		strcpy(str,pe.szExeFile);
		if(strcmp(str,name_av)==0)	//если процесс найден то записываем полный путь к нему
		{
			printf("Process found: %s\n",str);
			hp = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,false,pe.th32ProcessID);
			EnumProcessModules(hp, &hmod,sizeof(hmod),&dw);  // получаем первый модуль, связанный с процессом, то есть сам exe-файл
			GetModuleFileNameEx(hp, hmod, path, MAX_PATH);   // получаем путь к модулю

			printf("path: %s\n",path);

			CloseHandle(hp);
			CloseHandle(h);
			break;      
		}
	}
	CloseHandle(h);
	getch();
	return 0;
}
Но выдает ошибку про преобразование типов
Error 5 error C2664: 'GetModuleFileNameExW' : cannot convert parameter 3 from 'char [260]' to 'LPWSTR'
Error 4 error C2664: 'strcpy' : cannot convert parameter 2 from 'WCHAR [260]' to 'const char *

Как правильно преобразовать типы?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 29.08.2010, 12:18   #9
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

В General-опциях проекта измените Use Unicode Character Set на Use Multi-Byte Character Set или используйте функцию wcstombs_s
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 29.08.2010, 12:27   #10
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

и последний вопрос как преобразовать char path[MAX_PATH] в string?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убивание процессов! Nice42ru Помощь студентам 27 20.12.2009 19:47
Блокировка процессов Zeraim Операционные системы общие вопросы 5 17.04.2008 13:02
отключение процессов UROKSAN Win Api 1 10.04.2008 09:08
Память процессов Carbon Безопасность, Шифрование 2 05.05.2007 23:59