GetRegStringValue nie działa w win7

0

Witam
Mam problem z działaniem GetRegStringValue z ComObj delphi w windows 7 tzn: działa odnośnie gałęzi rejestru HKEY_CURRENT_USER a nie działa jeśli czyta z HKEY_LOCAL_MACHINE. W windzie XP czyta wartości z obu gałęzi a na kompach z 7ką tylko z pierwszej. Posiadam delphi 7 personal jeśli ma to jakieś znaczenie. Poniżej podaję przykładowy kod wystarczy skopiować do unita i button na formę pod XPekiem poda wszystko a pod 7ką tylko pierwsze:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function  PicPath(): string;
begin
  Result:= GetRegStringValue('Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\', 'My Pictures', HKEY_CURRENT_USER)+'\';
  //Bierze z rejestru ścieżkę do kat Moje obrazy działa w XP i win 7
end;
function  GetRegOwner(): string;
begin
  Result:= GetRegStringValue('SOFTWARE\\7-Zip\\Path', '', HKEY_LOCAL_MACHINE);
  //Bierze z rejestru USERA windowsa działa w XP a nie działa w win7 choć taki klucz w win 7 się znajduje
end;
function  GetOEM(): string;
begin
  Result:= GetRegStringValue('SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\', 'ProductId', HKEY_LOCAL_MACHINE);
  //Bierze z rejestru OEM number windowsa działa w XP a nie działa w win7 choć taki klucz w win 7 się znajduje
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(PicPath);
ShowMessage(GetRegOwner);
ShowMessage(GetOEM);
end;

end.
0

Bo brak uprawnień.

0

Wczoraj posiedziałem na necie i jakośto zrobiłem. Winą jest przekierowywanie na OSx64 z:
HKEY_LOCAL_MACHINE\SOFTWARE do HKEY_LOCAL_MACHINE\Wow6432Node\SOFTWARE
jednym slowem jak program 32bit pyta o ten 1 klucz to dostaje informacje z tego 2go w którym nie jest to samo.

Olałem w takim razie ComObj i próbowałem czytać rejestr przez Registry
Kod który działa na XP i Win7x64 dziś jeszcze sprawdzę czy działa w Visciex32 i Win7x32:

function GetOEMNumber: string;
var
Registry: TRegistry;
begin
Registry := TRegistry.Create(KEY_WRITE OR $0100); //przez to g.. $0100 się nasiedziałem
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\',FALSE);
//OpenKey musi być w win7 bo OpenKeyReadOnly nie działa (met prob i bledow)
if Registry.ReadString('ProductId')<>'' then
begin
Result:= Registry.ReadString('ProductId');
Registry.CloseKey;
Registry.Free
end else
begin
Registry.CloseKey;
Registry.OpenKeyReadOnly('Software\Microsoft\Windows NT\CurrentVersion\');
result := Registry.ReadString('ProductId');
Registry.CloseKey;
Registry.Free;
end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1