[ Passwd @ 05.01.2006. 18:18 ] @
Ne znam kako da dobijem popis svih ROOT key-eva, i cijelu dalju strukturu, i kako da dobijem neki OnRegChange i lokaciju gdje se sta promjenilo.. [Ovu poruku je menjao Passwd dana 05.01.2006. u 19:25 GMT+1] |
[ Passwd @ 05.01.2006. 18:18 ] @
[ _BloB_ @ 06.01.2006. 07:17 ] @
![]() ovako, za notifikaciju kad neko menja registry, koristi funkciju: RegNotifyKeyChangeValue() imas lep tutorial za to na : http://delphi.about.com/library/nosearch/npf052003.htm mora da bude pozvana iz posebnog thread-a.... a sto se tice spiska svih nodova u registry-ju koristi se: RegEnumKeyEx() guglaj malo, sada znas sta da trazis... ![]() ima tu dosta problema, bavio sam se ja nedavno time, i nisam bas najsrecniji kako je to sve podrzano... ali videces vec sam... sretno... pozdrav Blob [ Passwd @ 06.01.2006. 19:31 ] @
Da al nije mi bas nesto onaj primjer..trebam nesto puno mocnije napravit sa puno vise detalja a i ne vidim zasto bi koristio za listanje RegEnumKeyEx, evo primjer sa MSDN-a:
Code: // QueryKey - Enumerates the subkeys of key and its associated values. // hKey - Key whose subkeys and values are to be enumerated. #include <iostream> #include <windows.h> #include <stdio.h> #include <tchar.h> #define MAX_KEY_LENGTH 255 #define MAX_VALUE_NAME 16383 void QueryKey(HKEY hKey) { TCHAR achKey[MAX_KEY_LENGTH]; // buffer for subkey name DWORD cbName; // size of name string TCHAR achClass[MAX_PATH] = TEXT(""); // buffer for class name DWORD cchClassName = MAX_PATH; // size of class string DWORD cSubKeys=0; // number of subkeys DWORD cbMaxSubKey; // longest subkey size DWORD cchMaxClass; // longest class string DWORD cValues; // number of values for key DWORD cchMaxValue; // longest value name DWORD cbMaxValueData; // longest value data DWORD cbSecurityDescriptor; // size of security descriptor FILETIME ftLastWriteTime; // last write time DWORD i, retCode; TCHAR achValue[MAX_VALUE_NAME]; DWORD cchValue = MAX_VALUE_NAME; // Get the class name and the value count. retCode = RegQueryInfoKey( hKey, // key handle achClass, // buffer for class name &cchClassName, // size of class string NULL, // reserved &cSubKeys, // number of subkeys &cbMaxSubKey, // longest subkey size &cchMaxClass, // longest class string &cValues, // number of values for this key &cchMaxValue, // longest value name &cbMaxValueData, // longest value data &cbSecurityDescriptor, // security descriptor &ftLastWriteTime); // last write time // Enumerate the subkeys, until RegEnumKeyEx fails. if (cSubKeys) { printf( "\nNumber of subkeys: %d\n", cSubKeys); for (i=0; i<cSubKeys; i++) { cbName = MAX_KEY_LENGTH; retCode = RegEnumKeyEx(hKey, i, achKey, &cbName, NULL, NULL, NULL, &ftLastWriteTime); if (retCode == ERROR_SUCCESS) { _tprintf(TEXT("(%d) %s\n"), i+1, achKey); } } } // Enumerate the key values. if (cValues) { printf( "\nNumber of values: %d\n", cValues); for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) { cchValue = MAX_VALUE_NAME; achValue[0] = '\0'; retCode = RegEnumValue(hKey, i, achValue, &cchValue, NULL, NULL, NULL, NULL); if (retCode == ERROR_SUCCESS ) { _tprintf(TEXT("(%d) %s\n"), i+1, achValue); } } } } int _tmain(void) { HKEY hTestKey; if( RegOpenKeyEx( HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft"), 0, KEY_READ, &hTestKey) == ERROR_SUCCESS ) { QueryKey(hTestKey); system("PAUSE"); return EXIT_SUCCESS; } } Kad bi ovo isto u delphiu bilo: Code: procedure TForm5.Button1Click(Sender: TObject); var Reg:TRegistry; begin Reg:=TRegistry.Create; Reg.RootKey:=HKEY_CURRENT_USER; Reg.OpenKey('\SOFTWARE\Microsoft\',false); Reg.GetKeyNames(Memo1.Lines); Reg.Free; end; Delphi power ![]() Samo ne znam kako da izlistam sadrzaj recimo HKEY_LOCAL_MACHINE i ostalih root keyeva, dok za ostale keyeve i value je lagano izlistat..samo za ovo ako si sreo neku funkciju pa makar i bila API? [ Passwd @ 06.01.2006. 20:21 ] @
"Bilo kuda Windows svuda"
![]() Evo, uspio sam napravit sto sam htio, nista bez windowsa i one funkcije ![]() Evo ako ce slucajno nekom nekad trebat: Code: unit Unit5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry; type TForm5 = class(TForm) Button1: TButton; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form5: TForm5; implementation {$R *.dfm} procedure TForm5.Button1Click(Sender: TObject); var rez:HKEY; koliko:DWORD; x:integer; subKeyName:array [0..MAX_PATH] of Char; subKeyNameSize:DWORD; lastWriteTime:FileTime; begin RegQueryInfoKey( HKEY_LOCAL_MACHINE, NIL, NIL, NIL, @koliko, NIL, NIL, NIL, NIL, NIL, NIL, NIL); for x:=0 to koliko-1 do begin subKeyNameSize := SizeOf(subKeyName); RegEnumKeyEx(HKEY_LOCAL_MACHINE, x, subKeyName, subKeyNameSize, nil, nil, nil, @lastWriteTime); Memo1.Lines.Add(IntToStr(x)+'-'+subKeyName); end; end; procedure TForm5.FormCreate(Sender: TObject); begin Memo1.Lines.Clear; end; end. Hvala! [Ovu poruku je menjao Passwd dana 07.01.2006. u 22:49 GMT+1] [ Passwd @ 07.01.2006. 21:54 ] @
Evo, napravio sam da ulazi u dubinu za jedno 4-5 keya, ne znam tocno (to jos lako nadopunim), vec ovaj dio koda radi, samo je problem sto kad se klikne na neki root key program izbaci neki access violation i nastavi dalje radit, sad ako netko zna kako taj ajmo reci mali bug izbjegnem i dal je mogao ovaj kod jednostavnije..
kod je u attachu, na formu samo stavit TreeView komponentu p0z [ Srki_82 @ 07.01.2006. 23:20 ] @
Jedino gde greska moze da se pojavi je kod onih redova gde pise
Code: TreeView1.Selected.Parent.Parent ili Code: TreeView1.Selected.Parent.Parent.Parent Verovatno je negde Parent = nil pa kad uradis Parent.Parent izadje ti Access Violation. Postavi breakpoint-e na tim mestima i idi step-by-step pa ces videti gde je tacno greska. P.S. To sto zelis se ne radi tako kao sto si krenuo ![]() [ Passwd @ 08.01.2006. 11:39 ] @
Citat: Srki_82:To sto zelis se ne radi tako kao sto si krenuo ![]() Kako onda..reci dok jos nije kasno ![]() [ Srki_82 @ 08.01.2006. 15:22 ] @
Evo... ovo je jedan od nacina... na brzaka je pisan pa ima nekih bug-ova (ako se root otvori sa * tako da se svaki naredno polje otvori automatski program ce verovatno da se zakuca i potrosi mnooooooogo memorije... mozda ima jos nesto, ali sam jedino ovo video... to se desava zbog toga sto se OnExpanding poziva rekurzivno i tako zauzima memoriju).
Izvoli program pa ga sam sredi da ti odgovara. Otvara samo jedan RootKey, ali se lako doradi da radi i za sve ostale. [ Passwd @ 08.01.2006. 16:32 ] @
E bome je ovo puno ljepse i elegantnije
![]() Jos ne shvacam kako si to uspio sa ovako malo koda..svaka cast ![]() thx [ Srki_82 @ 08.01.2006. 22:51 ] @
Nema na cemu... i nije mnogo komplikovano, samo pazljivo pogledaj kod.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|