Изменение приоритета процессов
Как изменить приоритет процесса в 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":
Apache — это кросплатформаенное программное обеспечение, относящееся к классу http-серверов. Поддерживается множеством операционных систем: Windows, Linux, MacOS и т.д. Одним из ключевых факторов в вопросе использования данного web-сервера является гибкость настройки и надежность выполнения операций. Apache включает в себя множество дополнительных модулей, позволяющих работать с различными базами данных, контролировать аутентификацию пользователей и т.д.
Интересные материалы на сайте:
В статье рассматривается пример работы с числами Фибоначчи, написанный на языке программирования PHP.
Рассматривается алгоритм подсчета и вывода статистики о посещаемых страницах сайта.
В статье рассказывается как начать свой бизнез грузоперевозок на территории Европы.
Список движков для создания игр на различных платформат, от PC и PlayStation 2, до Apple и Android.