Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Registry Editor & Monitor

[es] :: Pascal / Delphi / Kylix :: Registry Editor & Monitor

[ Pregleda: 3121 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Registry Editor & Monitor05.01.2006. u 18:18 - pre 222 meseci
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]
 
Odgovor na temu

_BloB_
Slobodan Pavkov
www.aspdotnetfaq.com
Kula, Serbia

Član broj: 35144
Poruke: 108
*.nspoint.net.

Sajt: www.aspdotnetfaq.com


Profil

icon Re: Registry Editor & Monitor06.01.2006. u 07:17 - pre 222 meseci


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





 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Registry Editor & Monitor06.01.2006. u 19:31 - pre 222 meseci
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?
 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Registry Editor & Monitor06.01.2006. u 20:21 - pre 222 meseci
"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]
 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Registry Editor & Monitor07.01.2006. u 21:54 - pre 222 meseci
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
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Registry Editor & Monitor07.01.2006. u 23:20 - pre 222 meseci
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
 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Registry Editor & Monitor08.01.2006. u 11:39 - pre 222 meseci
Citat:
Srki_82:To sto zelis se ne radi tako kao sto si krenuo


Kako onda..reci dok jos nije kasno
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Registry Editor & Monitor08.01.2006. u 15:22 - pre 222 meseci
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.
Prikačeni fajlovi
 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Registry Editor & Monitor08.01.2006. u 16:32 - pre 222 meseci
E bome je ovo puno ljepse i elegantnije
Jos ne shvacam kako si to uspio sa ovako malo koda..svaka cast

thx
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Registry Editor & Monitor08.01.2006. u 22:51 - pre 222 meseci
Nema na cemu... i nije mnogo komplikovano, samo pazljivo pogledaj kod.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Registry Editor & Monitor

[ Pregleda: 3121 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.