Робота з WinAPI функціями та доступ до системних ресурсів

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2007
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Методи та засоби КІТ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" Кафедра ПЗ ЗВІТ ДО ЛАБОРАТОРНОЇ РОБОТИ № 5 На тему: «Робота з WinAPI функціями та доступ до системних ресурсів» З дисципліни : «Методи та засоби КІТ» Тема роботи: Робота з WinAPI функціями та доступ до системних ресурсів. Мета роботи: Навчитись працювати з WinAPI функціями та системними ресурсами. ХІД РОБОТИ: ЗАВДАННЯ: Робота з реєстром, зміна відповідних ключів, задання відповідних параметрів. ТЕКСТ ПРОГРАМИ: Unit1: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Menus, Buttons, Registry, Unit2, XPMan; type TForm1 = class(TForm) lbKeys: TListBox; lvPair: TListView; PopupMenu1: TPopupMenu; pmChange: TMenuItem; pmDel: TMenuItem; N1: TMenuItem; cbRoot: TComboBox; SBar1: TStatusBar; pmCreate: TMenuItem; PopupMenu2: TPopupMenu; pmCreateKey: TMenuItem; XPManifest1: TXPManifest; procedure FormCreate(Sender: TObject); procedure ShowSubKey(_hkey: HKEY); procedure lbKeysClick(Sender: TObject); procedure lbKeysDblClick(Sender: TObject); procedure cbRootChange(Sender: TObject); procedure PopupMenu1Popup(Sender: TObject); procedure pmCreateKeyClick(Sender: TObject); procedure pmCreateClick(Sender: TObject); procedure pmChangeClick(Sender: TObject); procedure pmDelClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Const RootW: array[0..5]of HKEY=( HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_DYN_DATA); implementation {$R *.dfm} var path: array[0..300] of string; fullp: string; ip: integer; root: HKEY; Vals: TStringList; _Stop: boolean = false; NeedVal: integer; Data : string; NeedName: string; cc: integer; vname : pchar; sname: string; _type: cardinal; dat: array[0..4096] of char; sbuf: string; procedure TForm1.FormCreate(Sender: TObject); begin root:=HKEY_LOCAL_MACHINE; ShowSubKey(root); end; procedure TForm1.cbRootChange(Sender: TObject); begin root:=RootW[cbRoot.ItemIndex]; ip:=0; fullp:=''; SBar1.SimpleText:=''; lbKeys.Clear; lbKeysDblClick(self) end; procedure TForm1.ShowSubKey(_hkey: HKEY); var buf: ShortString; SubKNum, ValNum, lsname,lvname,lvdata: DWord; ltime: dword; name: PChar; k: cardinal; begin RegQueryInfoKey(_hkey,@buf,@length(buf),nil,@SubKNum,@lsname,nil, @ValNum,@lvname,@lvdata,nil,@ltime); lbKeys.Items.BeginUpdate; lvPair.Clear; lbKeys.Clear; if SubKNum<>0 then begin GetMem(name,lsname+1); for k:=0 to SubKnum-1 do begin RegEnumKey(_hkey,k,name,lsname+1); lbKeys.Items.Add(string(name)); end; FreeMem(name); end; if ip>0 then lbKeys.Items.Insert(0,'<...>'); lbKeys.Items.EndUpdate; end; procedure TForm1.lbKeysDblClick(Sender: TObject); var _hkey: HKEY; i: integer; begin i:=lbKeys.ItemIndex; if i>=0 then if lbKeys.Items.Strings[i]='<...>' then begin dec(ip); end else begin path[ip]:=lbKeys.Items.Strings[i]; inc(ip); end; fullp:=''; for i:=0 to ip-1 do fullp:=fullp+path[i]+'\'; Sbar1.Panels.Items[0].Text:=cbRoot.Text+'\'+fullp; if RegOpenKeyEx(root,pchar(fullp),0,KEY_EXECUTE ,_hkey) =0 then begin ShowSubKey(_hkey); end else ShowMessage('Помилка'); RegCloseKey(_hkey); end; procedure TForm1.lbKeysClick(Sender: TObject); var buf: array[0..100] of char; SubKNum, ValNum: integer; lsname,lvname,lvdata: dword; ltime: dword; i, k, n: dword; vname: PChar; st1: string; bufw: dword; _type: integer; err: longint; _path: string; buf0: array[0..255] of char; _hkey: HKEY; begin i:=lbKeys.ItemIndex; lvPair.Items.Clear; if (lbKeys.Items.Strings[i]<>'<...>') then else exit; if (fullp<>'') then _path:=fullp+lbKeys.Items.Strings[i]+'\' else _path:=lbKeys.Items.Strings[i]+'\'; if RegOpenKeyEx(root,pchar(_path),0,KEY_EXECUTE ,_hkey)=0 then begin RegQueryInfoKey(_hkey,@buf,@n,nil,@SubKNum,@lsname,nil, @ValNum,@lvname,@lvdata,nil,@ltime); if ValNum=0 then exit; getmem(vname,lvname+1); lvPair.Items.BeginUpdate; for k:=0 to valNum-1 do begin n:=lvname+1; RegEnumValue(_hkey,k,vname,n,nil,@_type,nil,nil); case _type of REG_SZ: st1:='String'; REG_DWORD: st1:='DWord'; REG_BINARY: st1:='Binary'; else st1:='---'; end; if length(vname)=0 then lvPair.Items.Add.Caption:='""' else lvPair.Items.Add.Caption:=string(vname); lvPair.Items[lvPair.Items.Count-1].SubItems.Add(st1); n:=lvdata+200; err:=RegQueryValueEx (_hkey, vname, nil, @_type, @buf0, @n); if err<>0 then showmessage(inttostr(err)); if _type=REG_SZ then st1:=string(buf0) else begin bufw:=Dword(buf0[0])+(Dword(buf0[1])shl 8)+(Dword(buf0[2])shl 16)+(Dword(buf0[3])shl 32); if _type=REG_DWORD then st1:=inttostr(bufw); if _type=REG_BINARY then st1:=(IntToHex(bufw,8)); end; lvPair.Items[lvPair.Items.Count-1].SubItems.Add(string(st1)); end; lvPair.Items.EndUpdate; freemem(vname); RegCloseKey(_hkey); end else ShowMessage('Вказаний розділ не знайдений'); end; procedure TForm1.PopupMenu1Popup(Sender: TObject); begin if(lvPair.ItemIndex>=0) then begin pmChange.Enabled:=true; pmDel.Enabled:=true; end else begin pmChange.Enabled:=false; pmDel.Enabled:=false; end; end; //створення/видалення параметрів procedure TForm1.pmCreateKeyClick(Sender: TObject); var _hk: hkey; name: string; er: dword; begin InputQuery('Створення разділу','Імя',name); er:=RegCreateKeyEx(root,pchar(fullp+name+'\'),0,'',REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY,nil,_hk,nil); if er<>0 then ShowMessage(IntToStr(er)) else begin RegOpenKeyEx(root,pchar(fullp),0,KEY_READ,_hk); ShowSubKey(_hk); end; RegCloseKey(_hk); end; procedure TForm1.pmCreateClick(Sender: TObject); var _hk: hkey; sval: string; BWVal: dword; _Type, size: cardinal; p: pointer; begin FormInput:=TFormInput.Create(form1); if sender=pmChange then with FormInput do begin ledName.Text:=lvPair.Selected.Caption; ledVal.Text:=lvPair.Selected.SubItems.Strings[1]; if lvPair.Selected.SubItems.Strings[0]='String' then rbStr.Checked:=true else if lvPair.Selected.SubItems.Strings[0]='Binary' then rbBin.Checked:=true else rbDW.Checked:=true; end; FormInput.ShowModal; if FormInput.ModalResult=mrOk then begin if RegOpenKeyEx(root,pchar(fullp+lbKeys.Items.Strings[lbKeys.ItemIndex]), 0,KEY_SET_VALUE,_hk) =0 then with FormInput do begin if Sender=pmChange then RegDeleteValue(_hk,pchar(lvPair.Selected.Caption)); if rbStr.Checked then begin _Type:=REG_SZ; sval:=ledVal.Text; size:=sizeof(sval); RegSetValueEx(_hk,pchar(ledName.Text),0, _Type, pchar(sval), size) ; end else begin if rbBin.Checked then begin try _Type:=REG_BINARY; BWval:=StrToInt(ledVal.Text); except ShowMessage('Значення повинне бути представленим в'+ ' десятковій системі числення'); exit; end; end else begin _Type:=REG_DWORD; BWval:=StrToInt(ledVal.Text); end; size:=sizeof(dword); RegSetValueEx(_hk,pchar(ledName.Text),0, _Type, @BWVal, size) ; end; end; RegCloseKey(_hk); lbKeysClick(Self); end; FormInput.Free; end; procedure TForm1.pmChangeClick(Sender: TObject); begin pmCreateClick(Sender); end; procedure TForm1.pmDelClick(Sender: TObject); var _hk: hkey; begin if RegOpenKeyEx(root,pchar(fullp+lbKeys.Items.Strings[lbKeys.ItemIndex]), 0,KEY_SET_VALUE,_hk) =0 then RegDeleteValue(_hk,pchar(lvPair.Selected.Caption)); lbKeysClick(Self); end; end. Unit2: unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TFormInput = class(TForm) btnOk: TButton; btnCancel: TButton; GroupBox1: TGroupBox; rbStr: TRadioButton; rbDW: TRadioButton; rbBin: TRadioButton; GroupBox2: TGroupBox; ledName: TLabeledEdit; ledVal: TLabeledEdit; private { Private declarations } public { Public declarations } end; var FormInput: TFormInput; implementation {$R *.dfm} end. ПРОТОКОЛ:  ВИСНОВОК: На цій лабораторній роботі я навчився працювати з WinAPI функціями та системними ресурсами. Мною була створена програма – редактор реєстру.
Антиботан аватар за замовчуванням

10.02.2013 23:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!