PDA

View Full Version : اسم كامپيوتر



Little Robot
سه شنبه 02 تیر 1388, 15:45 عصر
سلام
قطعه كد استاندارد براي بدست آوردن اسم كامپيوتر رو كسي ميدونه؟
:متفکر:

Mahyaa
سه شنبه 02 تیر 1388, 16:27 عصر
GetComputeName

مثال :


function GetComputerNameFromNet: String;
var
Buffer: array[0..MAX_COMPUTERNAME_LENGTH] of char;
Size : DWord;
begin
size := 256;
if GetComputerName(Buffer, Size) then
Result := Buffer
else
Result := ''
end;

یونیت ShellApi در Uses اضافه شود.

1485159
سه شنبه 02 تیر 1388, 22:21 عصر
if GetComputerName(Buffer, Size) then

این کد چیرو مشخص میکنه؟

1485159
چهارشنبه 03 تیر 1388, 23:28 عصر
کسی نیست جواب بده؟

Mahyaa
پنج شنبه 04 تیر 1388, 09:45 صبح
if GetComputerName(Buffer, Size) then
این کد چیرو مشخص میکنه؟

تابع GetComputerName ، نام کامپیوتر را در Buffer میریزه و خود تابع در صورت موفقیت در اجرا ، مقدار True برمیگردونه. در نتیجه مقدار Buffer بعد از اجرای تابع، در صورتی معتبره که خود تابع true برگردونده باشه.

1485159
پنج شنبه 15 مرداد 1388, 14:46 عصر
size := 256;


خوب چرا 256؟

K.Mohammadreza
پنج شنبه 15 مرداد 1388, 15:47 عصر
اين کد فکر کنم بهتر باشه



procedure TForm1.Button1Click(Sender: TObject);
var temp: array[0.. MAX_COMPUTERNAME_LENGTH + 1] of char;
a:cardinal;
begin
a:= MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName(temp,a);
button1.Caption:=strpas(temp);
//SetComputerName('ComputerName');
end;

Mahyaa
پنج شنبه 15 مرداد 1388, 16:16 عصر
اين کد فکر کنم بهتر باشه



procedure TForm1.Button1Click(Sender: TObject);
var temp: array[0.. MAX_COMPUTERNAME_LENGTH + 1] of char;
a:cardinal;
begin
a:= MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName(temp,a);
button1.Caption:=strpas(temp);
//SetComputerName('ComputerName');
end;




چرا ؟ چه فرقی کرد ؟

K.Mohammadreza
پنج شنبه 15 مرداد 1388, 17:47 عصر
فرقي نکرد فقط مشکلتونو با عدد 255 حل کرد!!!!!!!!!!!!!!

vcldeveloper
پنج شنبه 15 مرداد 1388, 19:15 عصر
وقتی آرایه را از صفر شروع می کنید، دیگه نیازی به MAX_COMPUTERNAME_LENGTH + 1 نیست، همان MAX_COMPUTERNAME_LENGTH کفایت میکنه.
سورس دوم به این دلیل بهتر هست که به Size مقدار MAX_COMPUTERNAME_LENGTH + 1 را اختصاص میده، در نتیجه همیشه طول Size و بافر با هم یکسان هست، حتی اگر در نسخه های بعدی ویندوز مقدار MAX_COMPUTERNAME_LENGTH تغییر کنه.

روش دیگه میتونست این باشه که بجای دادن یک مقدار ثابت به بافر، طول بافر را متناسب با مقدار برگشتی تابع تنظیم کنیم:


function GetThisComputerName: string;
var
Size: DWord;
begin
Size := 0;
GetComputerName(nil,Size);
Inc(Size);
SetLength(Result,Size);
GetComputerName(PChar(Result),Size);
end;