Какой лучший способ получить имя локального компьютера в Delphi - PullRequest
4 голосов
/ 21 июля 2009

Код должен быть совместим с D2007 и D2009.


Мой ответ: Спасибо всем, кто ответил, я пошел с:

function ComputerName : String;
var
  buffer: array[0..255] of char;
  size: dword;
begin
  size := 256;
  if GetComputerName(buffer, size) then
    Result := buffer
  else
    Result := ''
end;

Ответы [ 5 ]

17 голосов
/ 21 июля 2009

Windows API GetComputerName должно работать. Это определено в windows.pas.

10 голосов
/ 21 июля 2009

Другой подход, который хорошо работает, - получить имя компьютера через переменную окружения. Преимущество этого подхода (или недостаток, зависящий от вашего программного обеспечения) состоит в том, что вы можете легко заставить программу работать на другом компьютере.

Result := GetEnvironmentVariable('COMPUTERNAME');

Переменная среды имени компьютера задается системой. Чтобы «переопределить» поведение, вы можете создать пакетный файл, который вызывает вашу программу, устанавливая переменную среды перед вызовом (каждый интерпретатор команд получает свою собственную «копию» среды, и изменения являются локальными для этого сеанса или любых дочерних элементов). запущен с этой сессии).

8 голосов
/ 21 июля 2009

GetComputerName из Windows API - это путь. Вот обертка для этого.

function GetLocalComputerName : string;
    var c1    : dword;
    arrCh : array [0..MAX_PATH] of char;
begin
  c1 := MAX_PATH;
  GetComputerName(arrCh, c1);
  if c1 > 0 then
    result := arrCh
  else
    result := '';
end;
3 голосов
/ 05 апреля 2011

Что по этому поводу:

function GetComputerName: string;
var
  buffer: array[0..MAX_COMPUTERNAME_LENGTH + 1] of Char;
  Size: Cardinal;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  Windows.GetComputerName(@buffer, Size);
  Result := StrPas(buffer);<br/>
end;

С http://exampledelphi.com/delphi.php/tips-and-tricks/delphi-how-to-get-computer-name/

2 голосов
/ 21 июля 2009

Я использую это,

function GetLocalPCName: String;
var
    Buffer: array [0..63] of AnsiChar;
    i: Integer;
    GInitData: TWSADATA;
begin
    Result := '';
    WSAStartup($101, GInitData);
    GetHostName(Buffer, SizeOf(Buffer));
    Result:=Buffer;
    WSACleanup;
end;

Bye

...