Regedit bazı alanlar okunmuyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
master_20
Üye
Mesajlar: 85
Kayıt: 27 Eki 2010 09:42

Regedit bazı alanlar okunmuyor

Mesaj gönderen master_20 »

Merhaba Arkadaşlar, aşağıdaki kodla regeditte unistall alanındaki kayıtları getirerek bilgisayarda yüklü programların listesini almaya çalışıyorum ancak tüm programları getirmiyor, öncelikli olarak ofis versiyonlarını almam gerekiyor.
var
MyList: TStringList;
MyRegistry: TRegistry;
i: Integer;
Str: string;
begin
MyRegistry:=TRegistry.Create;
MyList:=TStringList.Create;
Memo1.Clear;
with MyRegistry do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall', False)=True then
GetKeyNames(MyList);
CloseKey;
mmo1.Assign(Mylist);
for i:=0 to MyList.Count-1 do
begin
RootKey:=HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+MyList, False);
Str:=ReadString('DisplayName');
if Str<>'' then
Memo1.Lines.Add(ReadString('DisplayName'));
CloseKey;
end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Regedit bazı alanlar okunmuyor

Mesaj gönderen mrmarman »

Bu linkteki cevapta kullandığım şekilde bir sen de bir dener misin ...

Özet geçeyim : 64 bit sistemler ile 32 bit sistemler için erişim parametresi oluşturuyor.

Kod: Tümünü seç

  // 32 veya 64 Bit sistemlerde Registry kaydına farklı erişim şekli var.
  function RegistryViewAccessFlag: LongWord;
    type
      TRegistryView = (rvDefault, rvRegistry64, rvRegistry32);

    function IsWOW64: Boolean;
    type
      TIsWow64Process = function( Handle: THandle; var Res: BOOL ): BOOL; stdcall;
    var
      IsWow64Result  : BOOL;
      IsWow64Process : TIsWow64Process;
    begin
      IsWow64Process := GetProcAddress( GetModuleHandle('kernel32'), 'IsWow64Process' );
      if Assigned(IsWow64Process) then
      begin
        if not IsWow64Process(GetCurrentProcess, IsWow64Result)
          then raise Exception.Create('Sıkıntı var, anlayamadım...');
        Result := IsWow64Result;
      end else Result := False;
    end;
  begin
    if IsWOW64 then Result := KEY_WOW64_64KEY
               else Result := KEY_WOW64_32KEY;
  end;
Kullanımı da şöyle:

Kod: Tümünü seç

var
  Reg          : TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ or RegistryViewAccessFlag );
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    ...
    ...
  finally
    Reg.Free;
  end;
Resim
Resim ....Resim
master_20
Üye
Mesajlar: 85
Kayıt: 27 Eki 2010 09:42

Re: Regedit bazı alanlar okunmuyor

Mesaj gönderen master_20 »

daha önce yazmış olduğunuz right click özellikli ofis versiyonlarında geçerli olmuyor maalesef :( ofis yüklü değil diyor.

bu verdiğinizle olacak gibi test edip bilgisini vereceğim. teşekkürler.
master_20
Üye
Mesajlar: 85
Kayıt: 27 Eki 2010 09:42

Re: Regedit bazı alanlar okunmuyor

Mesaj gönderen master_20 »

teşekkürler mrmarman. verdiğin son kod larla işimi hallettim.
Cevapla