View Full Version : خواندن رجیستری
DAMAVAND
شنبه 25 فروردین 1386, 00:15 صبح
با سلام
من دارم یه برنامه مینویسم که باید مقدار یه کلید رو که از نوع باینرییه رو بخونه و اون رو تویه مثلا
مثلا یه Lable نشون بده ولی چیزی که نشون میده تعدادی کارکتر به هم ریختست !!!???
من از کد زیر استفاده کردم اشکال کارم کجاست?!!!
////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
reg:TRegistry;
p:array [0..255] of char;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('SYSTEM\CurrentControlSet\Services\BIT S',False);
reg.ReadBinaryData('FailureActions',p,255));
Label1.Caption:=p;
reg.CloseKey;
reg.Free;
end;
end.
///////////////////////////////////////////////////////////////////////////////////////////////////////
با تشکر
mjdeveloper
شنبه 25 فروردین 1386, 00:18 صبح
فکر کنم باید مقدار باینری رو تبدیل به رشته کنی
vcldeveloper
شنبه 25 فروردین 1386, 09:03 صبح
اگر در داده های باینری، که بصورت Char دریافت شده، کاراکتر 0# وجود داشته باشه، نمایش داده ها تا همون کاراکتر متوقف میشه. برای رفع این مشکل، قبل از نمایش رشته مربوطه تمام کارکترهای 0# آن را به کارکتر دیگری، مثلا 32# تبدیل کنید.
DAMAVAND
یک شنبه 26 فروردین 1386, 11:32 صبح
اگر در داده های باینری، که بصورت Char دریافت شده، کاراکتر 0# وجود داشته باشه، نمایش داده ها تا همون کاراکتر متوقف میشه. برای رفع این مشکل، قبل از نمایش رشته مربوطه تمام کارکترهای 0# آن را به کارکتر دیگری، مثلا 32# تبدیل کنید.
سلام
این کارو کردم ولی بازم همون مشکل هست!!!:گیج:
بجای نشون دادن مقدار باینری کارترهای فارسی بهم ریخته نشون میده!!!
DAMAVAND
دوشنبه 27 فروردین 1386, 12:40 عصر
کسی راه حلی نداره?????!!!!!
vcldeveloper
دوشنبه 27 فروردین 1386, 18:00 عصر
بجای نشون دادن مقدار باینری کارترهای فارسی بهم ریخته نشون میده!!!
انتظار دارید چی نشون بده؟! مگه توی خود RegEdit ،در کادری که معادل ASCII داده ها را نمایش میده، چیزی غیر از یکسری کارکترهای نامفهوم نمایش میده؟!
شما می خواید چیکار کنید؟ داده ها را بصورت عدد نمایش بدید (مثلا 00 FF 23 78 A0) یا می خواید معادل ASCII هر کد را نمایش بدید؟ معادل ASCII اون مقدار باینری همون چیزی هست که بدست آوردید. اما اگر می خواید معادل عددی اونها را داشته باشید و مثل RegEdit اونها را در مبنای هگزا نمایش بدید، باید آرایه خودتون را از نوع Byte و نه Char تعریف کنید. در این صورت هر یک از خانه های آرایه مقداری بین 0..255 خواهد داشت. بعد باید یکی یکی مقدار موجود در هر خانه آرایه را بخوانید، به Hex تبدیل کنید و آنها را در یک متغیر از نوع String نگه داری کنید.
یه مثال ساده اش می تونه چیزی شبیه این باشه:
uses Registry;
function DecToHex(Value: byte): string;
begin
{Add your conversion code here}
Result := IntToStr(Value);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Reg : TRegistry;
Buff : array of byte;
i : integer;
TempStr,
ResultStr : string;
begin
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('SYSTEM\CurrentControlSet\Services\BIT S',False) then
begin
SetLength(Buff,Reg.GetDataSize('FailureActions'));
Reg.ReadBinaryData('FailureActions',Buff[0],SizeOf(Buff));
Reg.CloseKey;
for i := Low(Buff) to High(Buff) do
begin
TempStr := DecToHex(Buff[i]);
ResultStr := ResultStr + ' ' + TempStr;
end;
Label1.Caption := ResultStr;
end;
finally
Reg.Free;
end;
end;
دقت بکنید که تابع DecToHex که برای تبدیل از مبنای دسیمال به هگزا استفاده شده، در کد بالا پیاده سازی نشده. خودتون می تونید یه تابع برای انجام این تبدیل بنویسید، یا در اینترنت همچین تابعی را پیدا کنید.
DAMAVAND
چهارشنبه 29 فروردین 1386, 22:50 عصر
سلام
دسته شما درد نکنه با کمک شما مشکلم حل شد
با تشکر
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.