Изменение приоритета процессов
Как изменить приоритет процесса в Delphi? В статье рассмотрен простой метод смены приоритетов любым процессам. Алгоритмы работоспособны как в Windows 98, так и в Windows XP. Среда программирования: Borland Delphi 5.
На основе данного алгоритма была создана программа SP-xProcess, предназначенная для изменения приоритетов процессов в любой операционной системе семейства Windows старше Windows 95.
Алгоритм можно разбить на две самостоятельных фазы:
Рабочий массив данных, содержащий основные сведения о процессах в системе
var
my_pr : array[1..200] of record // здесь находятся все процессы
id : Int64; // для win9x нужен тип Int64
name : string; // название процесса в памяти
priority : integer; // числовое значение приоритета
end;
my_co_process: integer; // Количество процессов в системе
На самом деле о процессах можно узнать гораздо больше информации,
например, количество нитей (Threads), используемых процессом, размер
занимаемой памяти и т.д., но сейчас задача другая - просто установить
новый приоритет процессу.
Важное замечание: для Windows 9x переменная ID должна иметь тип Int64.
Получение списка процессов
type
TForm1 = class(TForm)
public
{ Public declarations }
procedure MyGetListProcess; // получаем список процессов
end;
procedure TForm1.MyGetListProcess;
var
hSnapShot: THandle;
lppe: TProcessEntry32;
procedure _FillList;
begin
// увеличиваем счетчик процессов в системе
inc(my_co_process);
// заполняем рабочий массив
my_pr[my_co_process].id := lppe.Th32ProcessID;
my_pr[my_co_process].name := ExtractFileName(lppe.szExeFile);
my_pr[my_co_process].priority := lppe.pcPriClassBase;
end;
begin
// создаем структуру для работы с процессами системы
hSnapShot:= CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnapShot <> INVALID_HANDLE_VALUE
then
begin
// формируем список процессов
my_co_process := 0;
// обнуляем счетчик процессов
lppe.dwSize := SizeOf(lppe);
// получаем первый процесс в списке процессов и заполняем
// рабочий массив
if Process32First(hSnapShot, lppe)
then _FillList;
// идем по цепочке процессов в системе до тех пор, пока
// не определим все процессы
while Process32Next(hSnapShot, lppe) do
_FillList;
// освобождаем структуру для работы с процессами
CloseHandle(hSnapShot);
end
end;
Изменение приоритета процесса по его идентификатору ID
precedure ChangePr(i : integer);
var
hPrcss : THandle;
prClass : DWORD;
begin
// устанавливаем код приоритета для процесса
prClass := IDLE_PRIORITY_CLASS;
// открываем дескриптор процесса с идентификатором ID
hPrcss:=OpenProcess(PROCESS_ALL_ACCESS, true, my_pr[i].id);
try
// меняем приоритет процесс на новый
SetPriorityClass( hPrcss, prClass);
finally
// закрываем дескриптор процесса
CloseHandle(hPrcss);
end;
end;
Существуют 4 базовых класса приоритетов процессов:
Использовать REALTIME_PRIORITY_CLASS на однопроцессорных системах не имеет смысла: операционная система не сможет нормально функционировать, и компьютер "зависнет".
Пример работы алгоритма изменения приоритета процесса.
Дополнительная информация на тему "работа с операционной системой Windows":
JavaScript — это язык веб-программирования, работающий на стороне клиента, позволяющий автоматизировать какую-либо деятельность на странице сайта, не нагружая сервер. Вся нагрузка лежит на компьютере пользователя. В нем можно создавать функции, а также использовать базовые алгоритмы, состоящие из следования-ветвления-цикла. Чаще всего программный код на языке JavaScript обрабатывается обычными веб-браузерами.
Интересные материалы на сайте:
Несложные примеры программирования на PHP.
Описание самодельного механизма блокировки, а также контроль доступа к файлам операционной системы средствами языка программирования PHP.
Несколько слов о том, как можно ускорить работу php-скриптов, не меняя логики работы алгоритмов в целом.
Пример получения различной информации, полезной для программиста в построении движков сайта.