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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 21:02   #1
Li4uk
 
Регистрация: 24.05.2010
Сообщений: 5
По умолчанию Приоритет для процесса

Прошу помощи правильно перероботать программу.

Задание таково:
Написать программу, которая:
Печатает на экран название класса приоритета для процесса, идентификатор которого заданы в командной строке ("низкий" - IDLE_PRIORITY_CLASS, "Нормальный" - NORMAL_PRIORITY_CLASS, "Высокий" - HIGH_PRIORITY_CLASS, "Высочайший" - REALTIME_PRIORITY_CLASS.

У меня есть похожая программа:

которая используя интерфейс системных вызовов API OC Windows, выводит в консоль названия всех процессов запущенных в системе, при этом для каждого процесса выводится его идентификатор (PID) и приоритет. После вывода всех процессов пользователю предоставляется возможность изменить приоритет нужного процесса (входные данные: PID, число, которое определяет класс приоритета (0 - idle priority, 1 - normal priority, 2 - high priority, 3 - realtime priority)) или завершить нужен процесс ( входные данные: PID).

Вот её листинг:

Код:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
using namespace std;

bool GetProcessList(); // Виводить в консоль список процесів
bool KillProcess(DWORD pid); // Завершує вибраний процес
bool SetPriority(DWORD pid, int priority); // Встановлює приорітет для вибраного процесу
int GetPriority(int priority); // Визначає приорітет
void MainMenu(); // Реалізує вивід головного меню


bool main()
{	
	DWORD pid;
	int priority;
	int choise;
	bool k = true;

	while(k)
	{
		system("cls");
		GetProcessList();
		MainMenu();
		cout<<"Choice: ";
		cin>>choise;
		if(choise==1)
		{
			system("cls");
			GetProcessList();
			continue;
		}
		else if(choise==2)
		{
			cout<<"\nPID: ";
			cin>>pid;
			system("cls");
			if(KillProcess(pid))
				cout<<"Success!";
			else
				cout<<"Error!";
			Sleep(2000); // Пауза
			continue;
		}
		else if(choise==3)
		{
			cout<<"\nPID: ";
			cin>>pid;
			cout<<"Priority(0-IDLE, 1-NORMAL, 2-HIGH, 3-REALTIME): ";
			cin>>priority;
			system("cls");
			if(SetPriority(pid, priority))
				cout<<"Success!";
			else
				cout<<"Error!";
			Sleep(2000); // Пауза
			continue;
		}
		else if(choise==4)
		{
			break;
		}
		else
		{
			system("cls");
			cout<<"ERROR!";
			continue;
		}
	}
	return true;
}

bool GetProcessList()
{
	HANDLE hProcessSnap; 
	HANDLE hProcess;
	PROCESSENTRY32W pe32;
	DWORD dwPriorityClass;

	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

	if(hProcessSnap == INVALID_HANDLE_VALUE)
		return false;

	pe32.dwSize = sizeof(PROCESSENTRY32W);

	if(!Process32FirstW(hProcessSnap, &pe32))
	{
		CloseHandle(hProcessSnap);
		return false;
	}

	while(Process32NextW(hProcessSnap, &pe32))
	{
		hProcess = GetCurrentProcess();
		if(hProcess == NULL)
			continue;
		else
		{
			dwPriorityClass = GetPriorityClass(hProcess);
			if(!dwPriorityClass)
				continue;
		}

		wprintf( L"\n\nPROCESS NAME: %s", pe32.szExeFile);
		wprintf( L"\n  PID: %d", pe32.th32ProcessID );
		wprintf( L"\n  PRIORITY: ");

		switch(dwPriorityClass)
		{
		case 32: printf("normal"); break;
		case 64: printf("idle"); break;
		case 128: printf("high"); break;
		case 256: printf("realtime"); break;
		case 16384: printf("below normal"); break;
		case 32768: printf("above normal"); break;
		}
	}
	CloseHandle(hProcess);
	CloseHandle(hProcessSnap);
	return true;
}

bool KillProcess(DWORD pid)
{
	DWORD ExitCode;
	HANDLE hp;
	bool ret = true;

	if(pid)
	{
		hp = OpenProcess(PROCESS_TERMINATE, true, pid);
		if(hp)
		{
			GetExitCodeProcess(hp, &ExitCode);
			ret = TerminateProcess(hp, ExitCode);
		}
		else
			return false;
	}
	else
		return false;

	CloseHandle(hp);
	return ret;
}



bool SetPriority(DWORD pid, int priority)
{
	HANDLE hp;
	bool ret = true;
	if(pid)
	{
		hp = OpenProcess(PROCESS_SET_INFORMATION, true, pid);
		if(hp)
		{
			ret = SetPriorityClass(hp, GetPriority(priority));
		}
		else
			return false;
	}
	else
		return false;
	CloseHandle(hp);
	return ret;
}

int GetPriority(int priority)
{
	int a;
	switch(priority)
	{
	case 0: a=64; break;
	case 1: a=32; break;
	case 2: a=128; break;
	case 3: a=256; break;
	default: a=64;
	}
	return a;
}



void MainMenu()
{
	printf("\n\n=========================");
	printf("\n1. Refresh");
	printf("\n2. Terminate Process");
	printf("\n3. Set Priority");
	printf("\n4. Exit");
	printf("\n=========================\n\n");
}

Если не утрудняетесь, помогите...Буду оч, благодарен...

Последний раз редактировалось JTG; 27.05.2010 в 23:10.
Li4uk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приоритет процесса P@SH@ Win Api 9 13.05.2014 21:48
Получить ID процесса для setwindowshookex TwiX Общие вопросы Delphi 2 20.05.2010 20:00
Создание сигнатуры функций для поиска их в памяти процесса Zlyden' Общие вопросы C/C++ 10 01.03.2010 21:27
Как изменить приоритет процесса [delphi] f1xed Помощь студентам 1 09.02.2010 14:31
Приоритет чужого процесса (консультация) Air Win Api 9 06.03.2008 20:05