获取计算机名并在delphi中使用showmessage显示它
我使用这个代码 如何使其以消息的形式出现在屏幕上获取计算机名并在delphi中使用showmessage显示它,delphi,delphi-7,Delphi,Delphi 7,我使用这个代码 如何使其以消息的形式出现在屏幕上 Function GetUserFromWindows:String; Var UserName : string; UserNameLen : Dword; Begin UserNameLen := 255; SetLength(userName, UserNameLen) ; If GetUserName(PChar(UserName), UserNameLen) Then
Function GetUserFromWindows:String;
Var
UserName : string;
UserNameLen : Dword;
Begin
UserNameLen := 255;
SetLength(userName, UserNameLen) ;
If GetUserName(PChar(UserName), UserNameLen) Then
Result := Copy(UserName,1,UserNameLen - 1)
Else
Result := 'Unknown';
End;
首先,您的功能是错误的:
function GetUserFromWindows: string;
var
iLen: Cardinal;
begin
iLen := 256; // UNLEN constant in LMCons.h says 256 - hard coded.
Result := StringOfChar(#0, iLen);
GetUserName(PChar(Result), iLen);
SetLength(Result, iLen);
end;
如果您真的想要计算机名,正如您的问题标题所说,它没有太大的不同:
function GetComputerNameFromWindows: string;
var
iLen: Cardinal;
begin
iLen := MAX_COMPUTERNAME_LENGTH + 1; // From Windows.pas
Result := StringOfChar(#0, iLen);
GetComputerName(PChar(Result), iLen);
SetLength(Result, iLen);
end;
现在,您可以在任何您喜欢的地方使用它们:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetUserFromWindows);
ShowMessage(GetComputerNameFromWindows);
end;
或:
该常量与计算机名一起,但您随后要求输入用户名。不需要使用StrLen,因为函数返回复制的字符数。但这个问题非常混乱。@David,你说得对。固定的(我抓到了很久以前的密码,没注意到。)谢谢。你说得对,这个问题有点困惑;这就是我解决这两个问题的原因。谢谢。我还是希望看到没有StrLen的版本,但那是次要的。@David:我不知道在这种情况下你为什么反对
StrLen
;它只是找到返回缓冲区的实际长度,并将Result
的长度调整到适当的大小。我假设一个单独的变量,然后分配给Result
将删除该变量,但它需要一个单独的字符串或字符数组分配。(不是争论——只是问为什么。)当你被告知答案时,函数返回长度似乎没有意义。计算机名还是用户名?这就像标题是要苹果,但问题主体是要桔子。当然,它们都是水果,但不是同一种。实际上,“在屏幕上显示”是最模糊的部分。OP在提问之前是否至少尝试过搜索?ShowMessage(GetUserFromWindows)代码>OP在标题中回答了他们自己的问题。
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption := GetUserFromWindows;
Label2.Caption := GetComputerNameFromWindows;
end;