Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Regedit den Kayıt Okuma
#1
Arkadaşlar Merhaba; Şöyle bir sorum var, Regedit e kayıt yazdırıyorum ve "Moduller" Değer="8521" kodunu eşitlemede kullanmak istiyorum bunu nasıl yapabilirim?


 
         r.OpenKey('\SoftWare\EmanetPro\Ayarlar',True);
         r.WriteString('Moduller','8521');
         r.CloseKey;
 


IF Modul=8521 Then 
Begin
Button1.Enable:=True;
End
Else
Button1.Enable:=False;
End;

Veya bu şekilde okuyabilir miyim?

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
M:TRegistry;
Modul:Boolean;
begin
M.OpenKey('\SoftWare\EmanetPro\Ayarlar',True);
Modul:=M.ReadBool('Moduller','8521');


Ek Dosyalar Resimler
   
Cevapla
#2
Arkadaşlar bu şekilde de denedim yine değeri alamadım.

Var
M:TRegistry;
ModulDeger:Integer;
begin
M.OpenKey('\SoftWare\EmanetPro\Ayarlar',True);
ModulDeger:=M.ReadInteger('Moduller');

If ModulDeger='8521' Then
Begin
ShowMessage(inttostr(ModulDeger));
End
Else
ShowMessage('Değer yok!');

Hata veriyor

---------------------------
Debugger Exception Notification
---------------------------
Project MENU.exe raised exception class ERegistryException with message 'Failed to get data for 'Moduller''. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------
Cevapla
#3
Merhaba
Forumda TRegistry diye arama yapmak isteyebilirsiniz.

Create yok, Rootkey yok. Bunlar temel yapı.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#4
(09-06-2021, Saat: 08:29)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba
Forumda TRegistry diye arama yapmak isteyebilirsiniz.

Create yok, Rootkey yok. Bunlar temel yapı.

Ben daha önceden create ediyorum sonrasındaokuyup eşitlemek istedim.

Merhaba, Böyle bir kod örneği buldum ama Delphi7 kullandığım için çalışmadı.

unit un<span class="highlight" style="padding-left: 0px; padding-right: 0px;">tRegistry</span>Helper;
 
interface

uses Classes, Registry;

type
<span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper=class helper for <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>
public
  function ReadMultiStrings(const Name: String): String;
  function WriteMultiStrings(const Name: String;const sList:TStrings): Boolean;overload;
  function WriteMultiStrings(const Name:String;Values: String;const isLineBreak:Boolean=True): Boolean;overload;
  function WriteMultiStrings(const Name:String;const Values:array of String):Boolean;overload;
end;

implementation

uses Windows, SysUtils, StrUtils;

function <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper.ReadMultiStrings(const Name: String): String;
var rdiBilgi:TRegDataInfo; DataType, iLen:Integer;
{$IF CompilerVersion<18.0}
function Trim(const S: string): string;
var
 I, L: Integer;
begin
 Result:=S;
 L := Length(S) - 1;
 I := 0;
 if (L > -1) and (S[I] > ' ') and (S[L] > ' ') then Exit;
 while (I <= L) and (S[I] <= ' ') do Inc(I);
 if I > L then begin
   Result:='';
   Exit;
 end;
 while S[L] <= ' ' do Dec(L);
 Result := Copy(S, I , L - I + 1);
end;
{$IFEND}
begin
Result:='';
if GetDataInfo(Name, rdiBilgi) then begin
  iLen:=Round(rdiBilgi.DataSize / SizeOf(Char));
  SetLength(Result, iLen);
  DataType:=REG_MULTI_SZ{=7};
  if RegQueryValueEx(CurrentKey, PChar(Name), nil, @DataType, Pointer(Result), @rdiBilgi.DataSize)=ERROR_SUCCESS then begin
    Result:=ReplaceText(Trim(Result), #0, sLineBreak);
  end;
end;
end;

function <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper.WriteMultiStrings(const Name: String; const Values: array of String): Boolean;
var sVal:String; iPos:Integer;
begin
sVal:='';
for iPos := Low(Values) to High(Values) do
 sVal:=sVal+Values[iPos]+#0;
Result:=WriteMultiStrings(Name, sVal, False);
end;

function <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper.WriteMultiStrings(const Name: String; Values: String; const isLineBreak: Boolean): Boolean;
begin
if isLineBreak then
 Values:=ReplaceText(Trim(Values), sLineBreak, #0)+#0;
Result:=(RegSetValueEx(CurrentKey, PChar(Name), 0, REG_MULTI_SZ {=7}, PChar(Values), Length(Values) * SizeOf(Char)))=ERROR_SUCCESS;
end;

function <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper.WriteMultiStrings(const Name: String; const sList: TStrings): Boolean;
begin
Result:=WriteMultiStrings(Name, ReplaceText(Trim(sList.Text), sList.LineBreak, #0)+#0, False);
end;

end.
Cevapla
#5
Üstadım kodun "daha önce create ediyordum" demiyor. 
VAR  tanımında M:TRegistry demişsin ki bu da bu procedure içerisinde tanımlanacak manasına geldi benim için.  Onun için böyle yazdım.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#6
(09-06-2021, Saat: 09:20)OZCANK Adlı Kullanıcıdan Alıntı:
(09-06-2021, Saat: 08:29)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba
Forumda TRegistry diye arama yapmak isteyebilirsiniz.

Create yok, Rootkey yok. Bunlar temel yapı.

Ben daha önceden create ediyorum sonrasındaokuyup eşitlemek istedim.

Merhaba, Böyle bir kod örneği buldum ama Delphi7 kullandığım için çalışmadı.

unit un<span class="highlight" style="padding-left: 0px; padding-right: 0px;">tRegistry</span>Helper;
 
interface

uses Classes, Registry;

type
<span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper=class helper for <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>
public
  function ReadMultiStrings(const Name: String): String;
  function WriteMultiStrings(const Name: String;const sList:TStrings): Boolean;overload;
  function WriteMultiStrings(const Name:String;Values: String;const isLineBreak:Boolean=True): Boolean;overload;
  function WriteMultiStrings(const Name:String;const Values:array of String):Boolean;overload;
end;

implementation

uses Windows, SysUtils, StrUtils;

function <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper.ReadMultiStrings(const Name: String): String;
var rdiBilgi:TRegDataInfo; DataType, iLen:Integer;
{$IF CompilerVersion<18.0}
function Trim(const S: string): string;
var
 I, L: Integer;
begin
 Result:=S;
 L := Length(S) - 1;
 I := 0;
 if (L > -1) and (S[I] > ' ') and (S[L] > ' ') then Exit;
 while (I <= L) and (S[I] <= ' ') do Inc(I);
 if I > L then begin
   Result:='';
   Exit;
 end;
 while S[L] <= ' ' do Dec(L);
 Result := Copy(S, I , L - I + 1);
end;
{$IFEND}
begin
Result:='';
if GetDataInfo(Name, rdiBilgi) then begin
  iLen:=Round(rdiBilgi.DataSize / SizeOf(Char));
  SetLength(Result, iLen);
  DataType:=REG_MULTI_SZ{=7};
  if RegQueryValueEx(CurrentKey, PChar(Name), nil, @DataType, Pointer(Result), @rdiBilgi.DataSize)=ERROR_SUCCESS then begin
    Result:=ReplaceText(Trim(Result), #0, sLineBreak);
  end;
end;
end;

function <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper.WriteMultiStrings(const Name: String; const Values: array of String): Boolean;
var sVal:String; iPos:Integer;
begin
sVal:='';
for iPos := Low(Values) to High(Values) do
 sVal:=sVal+Values[iPos]+#0;
Result:=WriteMultiStrings(Name, sVal, False);
end;

function <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper.WriteMultiStrings(const Name: String; Values: String; const isLineBreak: Boolean): Boolean;
begin
if isLineBreak then
 Values:=ReplaceText(Trim(Values), sLineBreak, #0)+#0;
Result:=(RegSetValueEx(CurrentKey, PChar(Name), 0, REG_MULTI_SZ {=7}, PChar(Values), Length(Values) * SizeOf(Char)))=ERROR_SUCCESS;
end;

function <span class="highlight" style="padding-left: 0px; padding-right: 0px;">TRegistry</span>Helper.WriteMultiStrings(const Name: String; const sList: TStrings): Boolean;
begin
Result:=WriteMultiStrings(Name, ReplaceText(Trim(sList.Text), sList.LineBreak, #0)+#0, False);
end;

end.

Aşağıdaki örnekleri bu siteden Delphican dan öğrenmiştim.
Emeği geçen tüm arkadaşlara teşekkür ederim

Kullanımı  regedit yazmak için

procedure TFrm_Giris.hatirlaClick(Sender: TObject);
begin
   Regdegeryaz('Kullanici', '','\Software\XXXX\Test\Ayarlar\');
   Regdegeryaz('Parola', '','\Software\XXXX\Test\Ayarlar\');
   Regdegeryaz('Yıl', '','\Software\CINAR\XXXX\Test\');
   Regdegeryaz('Tema', '-1','\Software\XXXX\Test\');
end;
-----------------------------------------------------------------------------------------------------------------------
Kullanımı okumak için

procedure TFrm_Giris.FormShow(Sender: TObject);
begin

   edit_kullaniciadi.Text := RegDegerOku('Kullanici','\Software\XXXX\TEST\Ayarlar\');
   edit_kullanicisifresi.Text := hextoascii(RegDegerOku('Parola','\Software\XXXX\TEST\Ayarlar\'));
   edit_calismayili.Text := RegDegerOku('Yıl','\Software\XXXX\TEST\Ayarlar\');

end;

-------------------------------------------------------------------------------------------


Aşağıdaki Procedure ler kullanılacak
procedure RegDegerYaz(const Anahtar, Deger,yol: String);
var
 r: tregistry;
begin
r := tregistry.Create;
 try

   r.RootKey := HKEY_CURRENT_USER;
   if r.OpenKey(yol, true) then
   begin
     r.WriteString(Anahtar, Deger);
   end;
 finally
   r.Free;
 end;
end;

---------------------------------------------------------------------------------------------------------
function RegDegerOku(const Anahtar,yol: String): String;
var
 r: tregistry;
begin
 Result := '';
 r := tregistry.Create;
 try
   r.RootKey := HKEY_CURRENT_USER;
   if r.OpenKey(yol, false) then
   begin
     Result := r.ReadString(Anahtar);
   end;
 finally
   r.Free;
 end;
end;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#7
Arkadaş yardımlarınız için çok teşekkür ederim. Yüreğinize sağlık. Sorunu bu şekilde Çözdüm.

var
  Reg: TRegistry;
 Modul: String;
 Value: Integer;
begin
 Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
 try
   with Reg do
   begin
     RootKey := HKEY_LOCAL_MACHINE; Reg.Access := KEY_ALL_ACCESS;
     if KeyExists('SOFTWARE\Wow6432Node\EmanetPro\Ayarlar') then
     begin
       OpenKey('SOFTWARE\Wow6432Node\EmanetPro\Ayarlar',True);
       try
         Modul := ReadString('Moduller');
       except
         ShowMessage('Registry key içeriği hatalı');
       end;
       Value := 0;
       if not TryStrToInt(Modul, Value) then
         ShowMessage('Registry key içeriği boş olabilir. Okunan değer: ' + QuotedStr(Modul))
       else
         ShowMessage('Okunan değer: ' + IntToStr(Value));
     end;
   end;
 finally
   Reg.CloseKey;
   Reg.Free;
end;


if Value=8520 Then
Begin
Emanet_Giris.BitBtn1.Enabled:=False;
End
Else
if Value=8521 Then
Begin
Emanet_Giris.BitBtn2.Enabled:=False;
End;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  INSERT INTO İle Kayit OZCANK 9 338 15-06-2021, Saat: 11:30
Son Yorum: OZCANK
  kayıt sorunu info@guzelceker.com 4 212 06-06-2021, Saat: 21:58
Son Yorum: glagher
  Kaydın ilk veya son kayıt olduğunu anlama akuyumcu63 6 341 26-05-2021, Saat: 07:57
Son Yorum: serdar
  birden fazla tabloya kayıt işlemi akuyumcu63 4 565 20-05-2021, Saat: 16:49
Son Yorum: akuyumcu63
  SQL Server dan Resim Okuma barissagir 4 273 18-05-2021, Saat: 18:57
Son Yorum: barissagir



Konuyu Okuyanlar: 1 Ziyaretçi