Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取计算机名并在delphi中使用showmessage显示它_Delphi_Delphi 7 - Fatal编程技术网

获取计算机名并在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;