6
votes

Quelle est la meilleure méthode pour obtenir le nom de l'ordinateur local à DELPHI

Le code doit être compatible avec D2007 et D2009.


Ma réponse: Merci à tous ceux qui ont répondu, je suis allé avec: p>

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;


3 commentaires

Je le rends habituellement plus court en n'utilisant pas de tampon séparé: setlength (résultat, 256); Setlength (résultat, GetComputerName (PCHAR (résultat), 255));


Stijn, vous n'utilisez certainement certainement pas ce code. getComputername renvoie un bool et n'accepte pas un littéral numérique pour son deuxième paramètre.


Alister, je vous conseille d'utiliser la constante nommée max_computerername_length pour votre taille de tampon au lieu des numéros magiques.


7 Réponses :


21
votes

L'API Windows GetComputername devrait fonctionner. Il est défini dans Windows.Pas.


1 commentaires

Ceci est une fonction d'API datée qui n'est limitée que 15 caractères. Vous devriez utiliser GetComputerternameEx à la place.



2
votes

J'utilise ceci, xxx

bye


0 commentaires

15
votes

Une autre approche, ce qui fonctionne bien consiste à obtenir le nom de l'ordinateur via la variable d'environnement. L'avantage de cette approche (ou désavantage en fonction de votre logiciel) est que vous pouvez affecter facilement le programme en fonctionnant facilement comme une machine différente.

Result := GetEnvironmentVariable('COMPUTERNAME');


0 commentaires

12
votes

GetComputername de l'API Windows est la voie à suivre. Voici une enveloppe pour cela.

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;


0 commentaires

4
votes

1 commentaires

Je ne sais pas si vous essayez de répondre à cette vieille question ou si vous essayez d'écrire une nouvelle question ?. Lire le FAQ Comme ce site fonctionne d'une manière différente de celle des forums traditionnels.



3
votes

Si vous voulez plus que le nom d'hôte, vous avez besoin GetComputerernameex . Comme il existe de nombreuses mauvaises implémentations autour ( max_commuterername_length code> ne suffit pas, et 1024 code> est mauvais), voici la mienne:

uses Winapi.Windows;

function GetLocalComputerName(
  NameType: TComputerNameFormat = ComputerNameDnsHostname): string;
var
  len: DWORD;
begin
  len:= 0;
  GetComputerNameEx(NameType, nil, len); //get length
  SetLength(Result, len - 1);
  if not GetComputerNameEx(NameType, PChar(Result), len) then RaiseLastOSError;
end;


0 commentaires

0
votes

Ce code fonctionne bien, sauf lorsque l'ordinateur est sur un groupe de travail simple et essayez d'utiliser GetLocalComputerername (ordinaireNamednslyPalifalifiée) renvoie le nom de l'ordinateur avec une touche n ° 0 (NULL) à la fin, entraînant une mauvaise transformation d'autres charneurs envoyés à une composante mémo comme un journal. Il suffit de résoudre ce problème à vérifier NULL à la fin.

function GetLocalComputerName(
  NameType: TComputerNameFormat = ComputerNameDnsHostname): WideString;
var
    len: DWORD;

begin

    len:= 0;
    GetComputerNameEx(NameType, nil, len);  //get length
    SetLength(Result, len - 1);
    if not GetComputerNameEx(NameType, PWideChar(Result), len) 
  then RaiseLastOSError;
    // fix null at end
    len := Length(Result);
    if (len > 2) and (Result[len] = #0) then
      Result := Copy(Result, 1, len-1);
end;


0 commentaires