PDA

View Full Version : رجیستری



mehrpars
دوشنبه 24 خرداد 1389, 23:52 عصر
سلام ،
اشکال کد زیر چی هست ، کلید رجیستری وجود داره ولی فقط false رو بر می گردونه .
هر کدی رو می نویسم ، حتی copy & paste که می کنم false رو بر می گردونه





var
reg: TRegistry;
begin
with TRegistry.Create do
TRY
RootKey := HKEY_LOCAL_MACHINE;
if KeyExists('SOFTWARE\Adobe\Adobe Gamma\Location') then
ShowMessage('true')
else
ShowMessage('false');
FINALLY
Free;
END;
end;

حمیدرضاصادقیان
سه شنبه 25 خرداد 1389, 00:28 صبح
سلام.شما چرا با openkey کار نمیکنی؟


var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVe rsion\RunOnce', True) then
begin
Reg.WriteString('MyApp','"' + ParamStr(0) + '"');
Reg.CloseKey;
end;
finally
Reg.Free;
inherited;
end;
end;

mehrpars
سه شنبه 25 خرداد 1389, 02:05 صبح
آره ، آخرم همین کارو کردم
با openkey خوندم و readString کردم و مقدار read شده اگر '' بود -->> کلید وحود نداره یا خالی هست ....

ولی چرا با KeyExist جواب نمیده ؟؟؟ آیا کار KeyExist همین نیست که وجود یک کلید رو چک کنه؟؟

majidbestgame
سه شنبه 25 خرداد 1389, 03:55 صبح
آره ، آخرم همین کارو کردم
با openkey خوندم و readString کردم و مقدار read شده اگر '' بود -->> کلید وحود نداره یا خالی هست ....

ولی چرا با KeyExist جواب نمیده ؟؟؟ آیا کار KeyExist همین نیست که وجود یک کلید رو چک کنه؟؟
__________________________________________________ __________________
سلام....
بله درسته کارش اینه که وجود یک کلید را چک کنه...ولی متاسفانه کدتون مشگل داره...


use Registry

procedure TForm1.Button1Click(Sender: TObject);
var reg:tregistry;
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
if reg.KeyExists('SOFTWARE\Adobe\Adobe Gamma')=true then begin
showmessage('true');
end
else begin
showmessage('false');
end;
reg.Free;
end;


شما اولش که آوردین و خواستین باهاش یک Value رو چک کنید (Location) که به علت عدم وجود False میداده حالا این کدی که من نوشتم چک کنید ببینید چطوره....
keyexists برای چک کردن کلید
Valueexists برای چک کردن Value و.....
اگه سوالی بود در حد توان هستیم در خدمتتون

Mahmood_M
سه شنبه 25 خرداد 1389, 14:33 عصر
کدی که خودتون نوشتید هیچ مشکلی نداره و درست عمل می کنه ! ، شاید Root رو اشتباه در نظر گرفتید ...
البته احتمال می دم که Location یک Value باشه نه یک Key ! ( همونطور که در پست 4 هم اشاره شد )
برای چک کردن Value ابتدا باید با OpenKey کلید مورد نظر رو باز کنید و بعد با ValueExists وجود Value رو در مسیر باز شده چک کنید ...

موفق باشید ...

mehrpars
سه شنبه 25 خرداد 1389, 15:14 عصر
کدی که خودتون نوشتید هیچ مشکلی نداره و درست عمل می کنه ! ، شاید Root رو اشتباه در نظر گرفتید ...
البته احتمال می دم که Location یک Value باشه نه یک Key ! ( همونطور که در پست 4 هم اشاره شد )
برای چک کردن Value ابتدا باید با OpenKey کلید مورد نظر رو باز کنید و بعد با ValueExists وجود Value رو در مسیر باز شده چک کنید ...

موفق باشید ...

ممنون دوستان
آره location در این کد key هست و من با keyexist داشتم value روچک می کردم ،
ولی اگر بجای KeyExist بیام و ValueExist رو بذارم و Value رو هم به کلید اضافه کنم false رو میده.

آقا محمود ، پس برای چک کردن Value باید حتما از openKey استفاده بشه ؟ درسته ؟

Mahmood_M
سه شنبه 25 خرداد 1389, 15:37 عصر
آقا محمود ، پس برای چک کردن Value باید حتما از openKey استفاده بشه ؟ درسته ؟
برای چک کردن Value باید ابتدا کلیدی که اون Value توش قرار داره رو باز کنید ، برای باز کردن هم باید از OpenKey استفاده بشه ، ولی برای چک کردن وجود Key بدون باز کردن مسیر خاصی می تونید وجودش رو چک کنید ...
نکته ی مهم اینکه ، نام Key و Value رو نباید با هم به OpenKey یا سایر توابع مرتبط با کلاس Registry بدید ، هر جا نیاز به Value بود مثل تابع ValueExists باید نام Value رو بدید و هر جا هم نیاز به Key بود مثل تابع KeyExists باید مسیر Key رو بدید ...

موفق باشید ...

mehrpars
سه شنبه 25 خرداد 1389, 16:25 عصر
ممنون نکته مهمی بود ، فراموشش نمی کنم:لبخندساده: