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

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

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

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

Рік:
2015
Тип роботи:
Звіт
Предмет:
Інші
Група:
КН

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" Кафедра ПЗ ЗВІТ ДО ЛАБОРАТОРНОЇ РОБОТИ № 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 функціями та системними ресурсами. Мною була створена програма – редактор реєстру.
Антиботан аватар за замовчуванням

2015

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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