代码需要与 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;
代码需要与 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;
Windows API GetComputerName应该可以工作。它在 windows.pas 中定义。
另一种效果很好的方法是通过环境变量获取计算机名称。这种方法的优点(或缺点取决于您的软件)是您可以轻松地欺骗程序作为不同的机器运行。
Result := GetEnvironmentVariable('COMPUTERNAME');
计算机名环境变量由系统设置。要“覆盖”该行为,您可以创建一个调用程序的批处理文件,在调用之前设置环境变量(每个命令解释器都有自己的环境“副本”,并且更改是该会话或任何子会话的本地更改从该会话启动)。
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;
那这个呢 :
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/
如果您想要的不仅仅是主机名,您还需要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
该参数的有效值为:
我用这个,
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;
再见
此代码效果很好,除非计算机在简单的工作组上并尝试使用 GetLocalComputerName(ComputerNameDnsFullyQualified) 返回带有 #0(空)字符的计算机名称,导致其他字符处理错误,作为日志发送到备忘录组件. 只需解决此问题,最后检查 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;