Изменение приоритета процессов
Как изменить приоритет процесса в Delphi? В статье рассмотрен простой метод смены приоритетов любым процессам. Алгоритмы работоспособны как в Windows 98, так и в Windows XP. Среда программирования: Borland Delphi 5.
На основе данного алгоритма была создана программа SP-xProcess, предназначенная для изменения приоритетов процессов в любой операционной системе семейства Windows старше Windows 95.
Алгоритм можно разбить на две самостоятельных фазы:
-
получение списка процессов
изменение приоритета процесса по его идентификатору ID
Рабочий массив данных, содержащий основные сведения о процессах в системе
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 базовых класса приоритетов процессов:
-
IDLE_PRIORITY_CLASS, prClass = 4
NORMAL_PRIORITY_CLASS, prClass = 8
HIGH_PRIORITY_CLASS, prClass = 13
REALTIME_PRIORITY_CLASS, prClass = 24
Использовать REALTIME_PRIORITY_CLASS на однопроцессорных системах не имеет смысла: операционная система не сможет нормально функционировать, и компьютер "зависнет".
Пример работы алгоритма изменения приоритета процесса.
Дополнительная информация на тему "работа с операционной системой Windows":
JavaScript — это язык веб-программирования, работающий на стороне клиента, позволяющий автоматизировать какую-либо деятельность на странице сайта, не нагружая сервер. Вся нагрузка лежит на компьютере пользователя. В нем можно создавать функции, а также использовать базовые алгоритмы, состоящие из следования-ветвления-цикла. Чаще всего программный код на языке JavaScript обрабатывается обычными веб-браузерами.
Интересные материалы на сайте:
Несложные примеры программирования на PHP.
Описание самодельного механизма блокировки, а также контроль доступа к файлам операционной системы средствами языка программирования PHP.
Несколько слов о том, как можно ускорить работу php-скриптов, не меняя логики работы алгоритмов в целом.
Пример получения различной информации, полезной для программиста в построении движков сайта.