代码需要与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;
答案 0 :(得分:17)
Windows API GetComputerName应该有效。它在windows.pas中定义。
答案 1 :(得分:10)
另一种效果很好的方法是通过环境变量获取计算机名称。这种方法的优点(或者取决于您的软件的缺点)是您可以轻松地将程序作为一台不同的机器运行。
Result := GetEnvironmentVariable('COMPUTERNAME');
计算机名称环境变量由系统设置。要“覆盖”该行为,您可以创建一个调用程序的批处理文件,在调用之前设置环境变量(每个命令解释器获取其自己的环境“副本”,并且更改是该会话或任何子项的本地更改从该会议开始)。
答案 2 :(得分:8)
Windows API中的GetComputerName是可行的方法。这是它的包装。
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 :(得分:3)
这个怎么样:
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/
答案 4 :(得分:2)
我用这个,
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;
再见
答案 5 :(得分:1)
如果您不仅需要主机名,还需要GetComputerNameEx。由于周围有许多错误的实现方式(MAX_COMPUTERNAME_LENGTH
不够,而1024
不好),这是我的:
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;
NameType
参数的有效值为:
答案 6 :(得分:0)
此代码效果很好,除非计算机位于简单的工作组中并尝试使用 GetLocalComputerName(ComputerNameDnsFullyQualified) 返回计算机名称并以 #0(空)字符结尾,从而导致对发送到 Memo 组件的其他字符的错误处理作为日志。 只需解决此问题,最后检查 null。
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;