Разработка диспетчера задач
Создание собственного аналога диспетчера задач для ОС Windows с обязательными функциями отображения списка запущенных процессов, нагрузки на процессор в процентах, отображения свободной оперативной памяти. Листинг программы. Основные элементы управления.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.06.2013 |
Размер файла | 201,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Казанский национальный исследовательский технический университет им. А.Н. Туполева-КАИ»
КУРСОВАЯ РАБОТА
по дисциплине: «Операционные системы»
на тему: «Разработка диспетчера задач»
Работу выполнил студент
III курса 23378 группы
Селютин Д. В.
Работу проверил:
преподаватель
Галиуллин Ильнар Айратович
Набережные Челны - 2013
СОДЕРЖАНИЕ
1. Введение
2. Постановка задачи
3. Структура программы
4. Описание реализации
5. Листинг программы
6. Описание использованных элементов управления
Список литературы
1. ВВЕДЕНИЕ
Диспетчер задач в операционных системах Windows -- утилита для вывода на экран списка запущенных процессов и потребляемых ими ресурсов (в частности статус, процессорное время и потребляемая оперативная память). Также есть возможность некоторой манипуляции процессами.
Его можно вызвать сочетанием клавиш Ctrl+Alt+Del. Диспетчер задач можно также запустить в командной строке, введя имя его исполняемого файла (taskmgr.exe) или выбрав соответствующий пункт в контекстном меню панели задач.
Диспетчер задач -- встроенная в операционную систему утилита. Она содержит вкладки:
- Приложения. Позволяет переключиться в нужное приложение, либо завершить его.
- Процессы. Разнообразные данные обо всех запущенных в системе процессах, можно завершать, менять приоритет, задавать соответствие процессорам (в многопроцессорных системах)
- Службы (начиная с Vista). Сведения обо всех службах Windows.
- Быстродействие. Графики загрузки процессора (процессоров), использования оперативной памяти.
- Сеть (отсутствует в случае отсутствия активных сетевых подключений). - Графики загрузки сетевых подключений.
- Пользователи (только в режиме администратора). Манипулирование активными пользователями.
2. ПОСТАНОВКА ЗАДАЧИ
Цель лабораторной работы - создать собственный аналог диспетчера задач для ОС Windows. Обязательные функции - отображение списка запущенных процессов, нагрузки на процессор в процентах, отображение свободной оперативной памяти.
3. СТРУКТУРА ПРОГРАММЫ
Программа написана на языке программирования Delphi 7, что подходит для работы практически во всех средах данного разработчика.
Программа проста в использовании и не требует никаких навыков работы с ней. В программе могут работать как профессиональные, так и не опытные пользователи.
Создаем первую форму, переименовываем ее в «Аналог диспетчера задач» и располагаем на ней следующие элементы управления - 1 PageControl (в данном компоненте создаем 3 вкладки - «Приложения», «Процессы» и «Быстродействие» соответственно; на вкладке «Приложения» располагаем 1 StringGrid и 2 Button; на вкладке «Процессы» располагаем 1 StringGrid и 1 Button; на вкладке «Быстродействие» располагаем 3 GroupBox), 1 StatusBar, 1 MainMenu, 1 Timer, 2 PopupMenu.
Создаем вторую форму, переименовываем ее в «Новая задача» и располагаем на ней следующие элементы управления - 1 Label, 1 ComboBox и 2 Button.
На вкладке «Приложения» кнопки переименовываем в «Новая задача» и «Снять задачу» соответственно, на вкладке «Процессы» кнопку переименовываем в «Завершить».
Главное меню будет состоять из следующих выпадающих блоков - «Файл», «Завершение работы» и «Справка» соответственно. В выпадающем меню «Файл» будет 2 подменю - «Новая задача» и «Выход». В выпадающем меню «Завершение работы» будет 3 подменю - «Смена пользователя», «Перезагрузка» и «Завершить работу» соответственно.
4. ОПИСАНИЕ РЕАЛИЗАЦИИ
В общем виде вкладка «Приложения» диспетчера задач показана на рисунке 1.
Рис. 1. Общий вид вкладки «Приложения»
При нажатии на кнопку «Новая задача» появляется окошко новой задачи:
Пользователю необходимо ввести либо выбрать из списка уже существующую задачу, и она тут же запустится и отобразится в диспетчере.
При нажатии на кнопку «Снять задачу» диспетчер закрывает выбранную задачу.
В общем виде вкладка «Процессы» диспетчера задач показана на рисунке 2.
Рис. 2. Общий вид вкладки «Процессы»
При нажатии на кнопку «Завершить» завершает работу выбранного процесса.
В общем виде вкладка «Быстродействие» диспетчера задач показана на рисунке 3.
Рис. 3. Общий вид вкладки «Быстродействие»
5. ЛИСТИНГ ПРОГРАММЫ
Первая форма:
unit taskkiller;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
Dialogs, ComCtrls, TeEngine, ExtCtrls, TeeProcs, StdCtrls,
Menus, tlhelp32, Grids, registry;
type
Tmainform = class(TForm)
PageControl: TPageControl;
appsheet: TTabSheet;
processsheet: TTabSheet;
speedsheet: TTabSheet;
Timer: TTimer;
killappbtn: TButton;
newbtn: TButton;
killprocessbtn: TButton;
status: TStatusBar;
MainMenu: TMainMenu;
filemenu: TMenuItem;
newtaskmenu: TMenuItem;
exitsubmenu: TMenuItem;
popmenuapplist: TPopupMenu;
killappmenuitem: TMenuItem;
popmenuprocesslist1: TPopupMenu;
killprocessmenuitem: TMenuItem;
changeprioritymenuitem: TMenuItem;
All: TGroupBox;
physmemory: TGroupBox;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
physmemload: TLabel;
physmemava: TLabel;
physmemall: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
virtmemload: TLabel;
virtmemava: TLabel;
virtmemall: TLabel;
processcount: TLabel;
threadscount: TLabel;
processlist: TStringGrid;
high: TMenuItem;
low: TMenuItem;
normal: TMenuItem;
realtime: TMenuItem;
cpuspeed: TLabel;
cpuspeedc: TLabel;
min: TMenuItem;
max: TMenuItem;
activateform: TMenuItem;
Bevel1: TBevel;
gotoprocesslist: TMenuItem;
norm: TMenuItem;
endworkmenu: TMenuItem;
rebootmenu: TMenuItem;
shutdownmenu: TMenuItem;
aboutmenu: TMenuItem;
aboutprogrammenu: TMenuItem;
userchangemenu: TMenuItem;
applist: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure exitsubmenuClick(Sender: TObject);
procedure killprocessbtnClick(Sender: TObject);
procedure killprocessmenuitemClick(Sender: TObject);
procedure highClick(Sender: TObject);
procedure lowClick(Sender: TObject);
procedure normalClick(Sender: TObject);
procedure realtimeClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure popmenuprocesslist1Popup(Sender: TObject);
procedure killappbtnClick(Sender: TObject);
procedure killappmenuitemClick(Sender: TObject);
procedure gotoprocesslistClick(Sender: TObject);
procedure popmenuapplistPopup(Sender: TObject);
procedure minClick(Sender: TObject);
procedure normClick(Sender: TObject);
procedure maxClick(Sender: TObject);
procedure activateformClick(Sender: TObject);
procedure newbtnClick(Sender: TObject);
procedure aboutprogrammenuClick(Sender: TObject);
procedure newtaskmenuClick(Sender: TObject);
procedure rebootmenuClick(Sender: TObject);
procedure shutdownmenuClick(Sender: TObject);
procedure userchangemenuClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function EnablePrivilege(const Value: Boolean; privilegename:string): Boolean;
procedure processinfotogrid(procinfogrid:TStringGrid);
function getpriority(id:THandle):string;
function killproc(id:THandle):boolean;
procedure setpriority(id:THandle;prclass:Cardinal);
function ThrCount(procinfogrid:TStringGrid):word;
procedure CurrentInfo;
function CurrentProcessorSpeed:string;
function OfficialCPUSpeed:string;
procedure MemInfo;
procedure AppInfoToGrid(grid:TStringGrid);
function killtaskfunc:boolean;
procedure WindowNotWorking(grid:TStringGrid);
end;
var
mainform: Tmainform;
implementation
uses Cmd;
{$R *.dfm}
function TMainForm.EnablePrivilege(const Value: Boolean; privilegename:string): Boolean;
var
hToken: THandle;
tp: TOKEN_PRIVILEGES;
d: DWORD;
begin
Result := False;
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) then
begin
tp.PrivilegeCount := 1;
LookupPrivilegeValue(nil, pchar(privilegename), tp.Privileges[0].Luid);
if Value then
tp.Privileges[0].Attributes := $00000002
else
tp.Privileges[0].Attributes := $80000000;
AdjustTokenPrivileges(hToken, False, tp, SizeOf(TOKEN_PRIVILEGES), nil, d);
if GetLastError = ERROR_SUCCESS then
begin
Result := True;
end;
CloseHandle(hToken);
end;
end;
procedure TMainForm.WindowNotWorking(grid:TStringGrid);
var i:word;
res:dword;
begin
for i:=1 to grid.RowCount-1 do
if SendMessageTimeOut(strtoint(applist.Cells[1,i]),WM_NULL,0,0,SMTO_NORMAL or SMTO_ABORTIFHUNG,50, res)=1 then grid.Cells[2,i]:='Работает' else grid.Cells[2,i]:='Не отвечает';
end;
function TMainForm.OfficialCPUSpeed:string;
var reg:TRegistry;
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('hardware\description\system\centralprocessor\0',false);
OfficialCPUSpeed:=inttostr(reg.readinteger('~mhz'))+' Mhz';
reg.CloseKey;
reg.Destroy;
end;
function TMainForm.CurrentProcessorSpeed:string;
var TimerHi, TimerLo: DWORD;
Res:double;
PriorityClass, Priority: integer;
begin
application.ProcessMessages ;
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(500);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Res := TimerLo / (1000.0 * 500);
CurrentProcessorSpeed:= Format(' %f MHz', [res]);
end;
procedure TMainForm.MemInfo;
var memstat:tmemorystatus;
begin
MemStat.dwLength := SizeOf(MemStat);
GlobalMemoryStatus(MemStat);
with MemStat do begin
physmemload.Caption :=Format('%0.3f ',[(dwTotalPhys-dwAvailPhys) div 1024 /1024]);
physmemall.Caption := Format('%0.3f ',[dwTotalPhys div 1024 / 1024]);
physmemava.Caption := Format('%0.3f ',[dwAvailPhys div 1024 / 1024]);
virtmemall.Caption := Format('%0.3f ',[dwTotalPageFile div 1024 / 1024]);
virtmemava.Caption := Format('%0.3f ',[dwAvailPageFile div 1024 / 1024]);
virtmemload.Caption:= Format('%0.3f ',[(dwTotalPageFile-dwAvailPageFile) div 1024 /1024]);
end;
end;
Function TMainForm.getpriority(id:THandle):string;
var hproc:THandle;
priority:cardinal;
h:byte;
begin
h:=0;
hproc:=OpenProcess(PROCESS_ALL_ACCESS,false,id);
priority:=GetPriorityClass(hproc);
if priority=IDLE_PRIORITY_CLASS then begin h:=1; getpriority:='Низкий';end;
if priority=NORMAL_PRIORITY_CLASS then begin h:=1; getpriority:='Средний';end;
if priority=HIGH_PRIORITY_CLASS then begin h:=1; getpriority:='Высокий';end;
if priority=REALTIME_PRIORITY_CLASS then begin h:=1;getpriority:='Абсолютный';end;
if h<>1 then getpriority:='Средний';
CloseHandle(hproc);
end;
procedure TMainForm.processinfotogrid(procinfogrid:TStringGrid);
var hsnap: Thandle;
procentry: TProcessEntry32;
k:byte;
begin
k:=1;
hsnap:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
procentry.dwSize:=sizeof(procentry);
Process32First(hsnap,procentry);
repeat
with procinfogrid do
begin
if k>rowcount-1 then
rowcount:=rowcount+1;
cells[0,k]:=procentry.szexefile;
cells[1,k]:=inttostr(procentry.th32ProcessID);
cells[2,k]:=inttostr(procentry.cntThreads);
cells[3,k]:=GetPriority(procentry.th32processid);
end;
k:=k+1;
until Process32Next(hsnap,procentry)<>true;
if k<procinfogrid.RowCount then procinfogrid.RowCount:=k;
CloseHandle(hsnap);
end;
function TMainForm.killproc(id:THandle):boolean;
var hproc:THandle;
ok:boolean;
begin
hproc:=OpenProcess(PROCESS_ALL_ACCESS,false,id);
ok:=TerminateProcess(hproc,0);
if ok=false then killproc:=false else killproc:=true;
CloseHandle(hproc);
end;
procedure TMainForm.setpriority(id:THandle;prclass:Cardinal);
var hproc:THANDLE;
begin
hproc:=OpenProcess(PROCESS_ALL_ACCESS,false,id);
SetPriorityClass(hproc,prclass);
CloseHandle(hproc);
end;
function TMainForm.ThrCount(procinfogrid:TStringGrid):word;
var k:word;
i:byte;
begin
k:=0;
for i:=1 to procinfogrid.RowCount-1 do
k:=k+strtoint(procinfogrid.cells[2,i]);
thrcount:=k;
end;
procedure TMainForm.CurrentInfo;
begin
application.ProcessMessages;
processinfotogrid(processlist);
AppInfoToGrid(applist);
processcount.caption:=inttostr(processlist.rowcount-1);
threadscount.Caption:=inttostr(thrcount(processlist));
status.Panels.Items[0].Text:='Процессов: '+processcount.caption;
status.Panels[1].Text:='Частота ЦП: '+cpuspeedc.Caption;
cpuspeedc.Caption:=' '+OfficialCPUSpeed;
meminfo;
status.Panels[2].Text:='Выделение памяти: '+physmemload.caption+'Мб';
WindowNotWorking(applist);
end;
function AddWinInfo(WinHandle: HWnd; list:TStringList): Boolean;
stdcall;
var WinCaption: array[0..255] of Char;
begin
Result:=True;
if isWindowVisible(WinHandle) then
if GetWindow(WinHandle,GW_OWNER)=0 then
begin
GetWindowText(WinHandle,WinCaption,SizeOf(WinCaption));
if (WinCaption<>'') then
List.Add(inttostr(WinHandle));
end;
end;
procedure TMainForm.AppInfoToGrid(grid:TStringGrid);
var descript:TStringList;
WinCaption:array[0..255] of char;
i:word;
begin
descript:=TStringList.Create;
with descript do
begin
Clear;
EnumWindows(@AddWinInfo,LParam(descript));
end;
for i:=0 to descript.Count-1 do
begin
if i+1>grid.RowCount-1 then grid.RowCount:=grid.RowCount+1;
GetWindowText(strtoint(descript.strings[i]),WinCaption,SizeOf(WinCaption));
grid.Cells[0,i+1]:=WinCaption;
grid.Cells[1,i+1]:=descript.strings[i];
end;
if grid.RowCount>i+1 then grid.RowCount:=i+1;
descript.Destroy;
end;
function TMainForm.killtaskfunc:boolean;
var hproc:THandle;
id:Cardinal;
begin
GetWindowThreadProcessId(strtoint(applist.Cells[1,applist.row]),id);
hproc:=OpenProcess(PROCESS_ALL_ACCESS,false,id);
if TerminateProcess(hproc,0) then Result:=true else Result:=false;
applist.RowCount:=applist.RowCount-1;
closehandle(hproc);
end;
procedure Tmainform.FormCreate(Sender: TObject);
begin
EnablePrivilege(true,'SeDebugPrivilege');
EnablePrivilege(true,'SeShutdownPrivilege');
pagecontrol.ActivePageIndex:=0;
with applist do
begin
cells[0,0]:='Задача';
cells[1,0]:='ID';
cells[2,0]:='Состояние'
end;
with processlist do
begin
cells[0,0]:='Процесс';
cells[1,0]:='PID';
cells[2,0]:='Кол-во потоков';
cells[3,0]:='Приоритет';
end;
CurrentInfo;
end;
procedure Tmainform.exitsubmenuClick(Sender: TObject);
begin
application.Terminate;
end;
procedure Tmainform.killprocessbtnClick(Sender: TObject);
var ok:boolean;
begin
ok:=killproc(strtoint(processlist.Cells[1,processlist.Row]));
if ok=false then MessageBox(mainform.Handle,'Невозможно завершение данного процесса','Ошибка',MB_OK);
processlist.RowCount:=processlist.RowCount-1;
end;
procedure Tmainform.killprocessmenuitemClick(Sender: TObject);
var ok:boolean;
begin
ok:=killproc(strtoint(processlist.Cells[1,processlist.Row]));
if ok=false then MessageBox(mainform.Handle,'Невозможно завершение данного процесса','Ошибка',MB_OK);
processlist.RowCount:=processlist.RowCount-1;
end;
procedure Tmainform.highClick(Sender: TObject);
begin
setpriority(strtoint(processlist.Cells[1,processlist.row]),HIGH_PRIORITY_CLASS);
end;
procedure Tmainform.lowClick(Sender: TObject);
begin
setpriority(strtoint(processlist.Cells[1,processlist.row]),IDLE_PRIORITY_CLASS);
end;
procedure Tmainform.normalClick(Sender: TObject);
begin
setpriority(strtoint(processlist.Cells[1,processlist.row]),NORMAL_PRIORITY_CLASS);
end;
procedure Tmainform.realtimeClick(Sender: TObject);
begin
setpriority(strtoint(processlist.Cells[1,processlist.row]),REALTIME_PRIORITY_CLASS);
end;
procedure Tmainform.TimerTimer(Sender: TObject);
begin
processinfotogrid(processlist);
CurrentInfo;
end;
procedure Tmainform.popmenuprocesslist1Popup(Sender: TObject);
begin
high.Checked:=false;
low.Checked:=false;
normal.Checked:=false;
realtime.Checked:=false;
if processlist.Cells[3,processlist.Row]='Средний' then normal.Checked:=true;
if processlist.Cells[3,processlist.Row]='Высокий' then high.Checked:=true;
if processlist.Cells[3,processlist.Row]='Низкий' then low.Checked:=true;
if processlist.Cells[3,processlist.Row]='Абсолютный' then realtime.Checked:=true;
end;
procedure Tmainform.killappbtnClick(Sender: TObject);
begin
if killtaskfunc=false then MessageBox(mainform.Handle,'Не возможно снять задачу!','Ошибка',0);
end;
procedure Tmainform.killappmenuitemClick(Sender: TObject);
begin
if killtaskfunc=false then MessageBox(mainform.Handle,'Не возможно снять задачу!','Ошибка',0);
end;
procedure Tmainform.gotoprocesslistClick(Sender: TObject);
var id:cardinal;
i:word;
begin
pagecontrol.ActivePageIndex:=1;
GetWindowThreadProcessId(strtoint(applist.cells[1,applist.row]),id);
for i:=1 to processlist.rowcount-1 do
if processlist.Cells[1,i]=inttostr(id) then
begin
processlist.Row:=i;
break;
end;
end;
procedure Tmainform.popmenuapplistPopup(Sender: TObject);
begin
if isIconic(strtoint(applist.cells[1,applist.Row])) then
begin
max.Enabled:=true;
min.Enabled:=false;
norm.Enabled:=true;
end
else
begin
max.Enabled:=false;
min.Enabled:=true;
norm.Enabled:=true;
end;
end;
procedure Tmainform.minClick(Sender: TObject);
begin
ShowWindow(strtoint(applist.cells[1,applist.row]),2);
end;
procedure Tmainform.normClick(Sender: TObject);
begin
ShowWindow(strtoint(applist.cells[1,applist.row]),1);
end;
procedure Tmainform.maxClick(Sender: TObject);
begin
ShowWindow(strtoint(applist.cells[1,applist.row]),3);
end;
procedure Tmainform.activateformClick(Sender: TObject);
begin
ShowWindow(strtoint(applist.cells[1,applist.row]),1);
SetForegroundWindow(strtoint(applist.Cells[1,applist.row]));
end;
procedure Tmainform.newbtnClick(Sender: TObject);
begin
CmdForm.showmodal;
end;
procedure Tmainform.aboutprogrammenuClick(Sender: TObject);
begin
MessageBox(mainform.Handle,'Аналог диспетчера задач','О программе',MB_OK);
end;
procedure Tmainform.newtaskmenuClick(Sender: TObject);
begin
cmdform.ShowModal;
end;
procedure Tmainform.rebootmenuClick(Sender: TObject);
begin
timer.Enabled:=false;
ExitWindowsEx(EWX_REBOOT,0);
end;
procedure Tmainform.shutdownmenuClick(Sender: TObject);
begin
timer.Enabled:=false;
ExitWindowsEx(EWX_SHUTDOWN,0);
end;
procedure Tmainform.userchangemenuClick(Sender: TObject);
begin
timer.Enabled:=false;
ExitWindowsEx(EWX_LOGOFF,0);
end;
end.
Вторая форма:
unit Cmd;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TCmdForm = class(TForm)
okbtn: TButton;
cancelbtn: TButton;
Label1: TLabel;
Cmdtext: TComboBox;
procedure cancelbtnClick(Sender: TObject);
procedure okbtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
CmdForm: TCmdForm;
implementation
{$R *.dfm}
procedure TCmdForm.cancelbtnClick(Sender: TObject);
begin
CmdForm.Close;
end;
procedure TCmdForm.okbtnClick(Sender: TObject);
begin
winexec(pchar(cmdtext.text),1);
CmdForm.Close;
end;
end.
6. ОПИСАНИЕ ИСПОЛЬЗОВАННЫХ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ
диспетчер задача процессор память
В программе использованы следующие элементы управления:
- PageControl - набор страниц, сложенных одна на другую.
- StringGrid - отображает различные данные в табличной форме.
- GroupBox - кадр вокруг группы в составе элемента управления с дополнительным заголовком.
- StatusBar - отображает элементы и данные в горизонтальной полосе в окне приложения.
- MainMenu - меню формы.
- Timer - формирует повторяющиеся события.
- PopupMenu - выпадающее меню.
- ComboBox - раскрывающийся список.
- Button - обычная кнопка.
- Label - стандартная надпись.
СПИСОК ЛИТЕРАТУРЫ
1. Delphi 2007. Алгоритмы и программы: О.В. Чеснокова -- Санкт-Петербург, НТ Пресс, 2008 г.
2. Основы программирования в интегрированной среде DELPHI: А. Желонкин -- Москва, Бином. Лаборатория знаний, 2004 г.
3. Самоучитель Delphi 7 Studio: Вячеслав Понамарев -- Санкт-Петербург, БХВ-Петербург, 2003 г.
4. Учимся программировать на Delphi 2007: О.В. Чеснокова -- Москва, НТ Пресс, 2008 г.
Размещено на Allbest.ru
Подобные документы
Ведение журнала событий системы безопасности Windows. Аудит успехов и аудит отказов. Работа диспетчера задач, методы его запуска. Утилита System Safety Monitor 2.0.6.566 как один из способов обнаружения процессов, запущенных в результате взлома.
лабораторная работа [905,4 K], добавлен 19.10.2014Анализ программ автоматизации деятельности диспетчера такси. Жизненный цикл автоматизированной информационной системы, язык программирования, система управления базами данных. Создание программы "Автоматизированное рабочее место диспетчера такси".
курсовая работа [1,6 M], добавлен 19.11.2010Основные параметры устройства отображения информации. Обоснование выбора используемых ресурсов микроконтроллера и схемы включения. Разработка схемы алгоритма. Описание и отладка программы. Схема электрическая принципиальная и листинг трансляции программы.
курсовая работа [121,3 K], добавлен 12.12.2014Применение программы-имитатора динамического распределения оперативной памяти, выполнение ее на ОС Windows 7 в интегрированной среде. Разработка приложений с графическим интерфейсом Delphi XE3. Автоматическая загрузка, исполнение и добавление процессов.
курсовая работа [284,7 K], добавлен 12.01.2015Разработка и внедрение модуля комплексной системы автоматизированного рабочего места диспетчера по транспорту, позволяющей автоматизировать работу диспетчера: по учету, контролю выполнения заявок, их регистрации, а также по созданию итоговых отчетов.
дипломная работа [4,3 M], добавлен 25.01.2013Декомпозиция диаграммы и обработка путевых листов. Подсистема учета оказанных транспортных услуг, работы водителей, затрат, ремонтов и сервисного обслуживания. Проектирование автоматизированного рабочего места диспетчера, разработка интерфейса программы.
дипломная работа [4,6 M], добавлен 20.01.2013Создание элемента управления для отображения карт, представляющих собой векторные изображений в формате Encapsulated PostScript. Поддержка использования программных интерфейсов. Разработка элемента управления, вписывание изображения в область компонента.
дипломная работа [1,1 M], добавлен 11.11.2010Разработка программного кода. Анализ набора функций, необходимых для реализации приложения. Создание компонента Timer. Получение списка имен процессов запущенных на локальном компьютере. Проверка правильности работы программы и соответствия требованиям.
курсовая работа [2,3 M], добавлен 05.01.2013Правила формирования списка на рабочем листе. Что понимается под структурой списка. Как осуществляется ввод данных. Простая сортировка списка. Интерфейс и функции приложения PowerPoint. Создание, редактирование и форматирование текстового документа.
лабораторная работа [25,1 K], добавлен 16.01.2015Описание архитектуры внешних выводов кристалла процессора. Рассмотрение форматов данных для целых чисел со знаком и без знака. Выбор модели памяти и структуры регистровой памяти. Использование кэш прямого отображения. Арифметические и логические команды.
курсовая работа [890,5 K], добавлен 05.06.2015