İyi günler arkadaşlar benim şöyle bir sorum olacak daha önce forumda baya bir calışma olmuşltu bunun hakkında memodaki degeri direk registrye yazma bu olayı yaptım fakat şöyle bir sorun var mesela
[HKEY_CURRENT_USER\Control Panel\aaaaa]
'test1'='test2'
@='c:\\TEST' Bu şekilde bir anahtar girdigimde registriye yazılıyor dogru olarak fakat
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Control Panel\Cursors]
@=''
'Scheme Source'=dword:00000002
bunu yazdıgımda yine registriye anahtarı işliyor fakat dikkat ettiyseniz ikinci verdigim deger word degil dword registriye dword olarak degil bunuda word degeri olarak işliyor sorun memo satırındaki değerin dword mü string mi olduğunun algılanmasında eger bir cözüm bulursanız teşekkürü bir borç bilirim şimdiden sagolun
Memodaki deger
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Merhaba,
TRegsitry nesnesini kullandığınızı varsayıyorum, bu nesnenin değer yazmak için kullandığı çeşitli metodlar var siz WriteString kullanıyorsunuz anladığım kadayırla, buda dize değeri yaratır, WriteInteger kullanırsanız DWORD değeri yaratır. kolay gelsin.
TRegsitry nesnesini kullandığınızı varsayıyorum, bu nesnenin değer yazmak için kullandığı çeşitli metodlar var siz WriteString kullanıyorsunuz anladığım kadayırla, buda dize değeri yaratır, WriteInteger kullanırsanız DWORD değeri yaratır. kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
-
- Üye
- Mesajlar: 42
- Kayıt: 04 Nis 2007 03:57
kardeş sagolasın ama kodla anlatmak daha dogru olacak önce programı anlatayım programda iki butonum var birincisi memoya girilen degeri direk rege yazıyor diğeri ise masaüstüne reg anahterı olarak kayıt yapıyor soru şu memoya girilrn deger strig değilde dword olacaksa nasıl olacak
- unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, registry,StrUtils;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
rootkey:hkey;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure SaveStr(Source,FileName:AnsiString);
var
F:File;
SaveMode:Integer;
begin
AssignFile(F,FileName);
SaveMode:=FileMode;
FileMode:=1;
try
Rewrite(F,1);
try
BlockWrite(F,Source[1],Length(Source));
finally
CloseFile(F);
end;
except
on EInOutError do raise Exception.Create('Yazma Hatası '+Filename);
end;
FileMode:=SaveMode;
end;
procedure TForm1.Button1Click(Sender: TObject);
var ad:string;
reg: TRegistry;
begin
SaveStr(Memo1.Text,PChar(ExtractFilePath(ParamStr(0))+'\mtct.reg'));
ad:=reg.ReadString('memo1.text');
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j,k:integer;
rt,rv,d,v:string;
reg: TRegistry;
begin
for i:=1 to Memo1.Lines.Count do
begin
if LeftStr(memo1.Lines.Strings,1)='[' then
begin
rt:=Memo1.Lines.Strings;
k:=length(rt);
j:=Pos('\',rt);
rt:=midStr(rt,2,j-2);
rv:=midStr(Memo1.Lines.Strings,j+1,k-j-1);
showmessage(rt+#13+rv);
end
else if LeftStr(memo1.Lines.Strings,1)='@' then
begin
k:=length(Memo1.Lines.Strings);
j:=pos('=',Memo1.Lines.Strings);
d:='@';
v:=midStr(Memo1.Lines.Strings,j+2,k-j-2);
j:=length(v);
v:=PChar(LeftStr(v,2)+midStr(v,4,100));
showmessage(d+#13+v);
Reg:=TRegistry.Create;
if rt='HKEY_CLASSES_ROOT' then Reg.RootKey:=HKEY_CLASSES_ROOT
else if rt='HKEY_CURRENT_USER' then Reg.RootKey:=HKEY_CURRENT_USER
else if rt='HKEY_LOCAL_MACHINE' then Reg.RootKey:=HKEY_LOCAL_MACHINE
else if rt='HKEY_USERS' then Reg.RootKey:=HKEY_USERS
else if rt='HKEY_CURRENT_CONFIG' then Reg.RootKey:=HKEY_CURRENT_CONFIG
else
begin
showmessage('Rootkey hatalı yazdınız');
Reg.CloseKey;
Reg.Free;
close;
end;
if Reg.OpenKey (rv, true) then Reg.WriteString('',v);
reg.CloseKey;
reg.free;
end
else if memo1.Lines.Strings='' then
else
begin
k:=length(Memo1.Lines.Strings);
j:=pos('=',Memo1.Lines.Strings);
d:=midStr(Memo1.Lines.Strings[i],2,j-3);
v:=midStr(Memo1.Lines.Strings[i],j+2,k-j-2);
showmessage(d+#13+v);
Reg:=TRegistry.Create;
if rt='HKEY_CLASSES_ROOT' then Reg.RootKey:=HKEY_CLASSES_ROOT
else if rt='HKEY_CURRENT_USER' then Reg.RootKey:=HKEY_CURRENT_USER
else if rt='HKEY_LOCAL_MACHINE' then Reg.RootKey:=HKEY_LOCAL_MACHINE
else if rt='HKEY_USERS' then Reg.RootKey:=HKEY_USERS
else if rt='HKEY_CURRENT_CONFIG' then Reg.RootKey:=HKEY_CURRENT_CONFIG
else
begin
showmessage('Rootkey hatalı yazdınız');
Reg.CloseKey;
Reg.Free;
close;
end;
if Reg.OpenKey (rv, true) then Reg.WriteString(d,v);
reg.CloseKey;
reg.free;
end;
end;
end;
end.
Şimdi hazır kod değilde mantığını anlamanız için daha doğru olacağını düşünüyorum, kodunuzu incelediğinizde Registry e sürekli r.WriteString metodu ile değer yazıyorsunuz, WriteString metodu, Registry e String değer alan DizeDeğeri yazar, eğer r.WriteInteger Metoduyla değer yazarsanız bu DWORD olarak Registrye kaydolur, kodunuzda DWORD değer yazmak istediğiniz bölümlerdeki WriteString ifadelerini WriteInteger olarak değiştirin, tabi WriteInteger metodu Integer tipinde parametre alacağı için gerekli tip uyumuna dikkat etmelisiniz.
Kolay gelsin.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr