0

この初等関数を実行しようとしていますが、うまくいきません:

function GetWindowsUserName: String;
  const
    MAX_LENGTH = 256;
  var
    UserNameLength: DWord;
  begin
    UserNameLength := MAX_LENGTH - 1;
    SetLength(Result, MAX_LENGTH);
    if GetUserName(PChar(Result), UserNameLength) then
      SetLength(Result, UserNameLength - 1)
    else
      Result := '';
  end;

formCreateで私は持っています:

AdvOfficeStatusBar1.Panels[0].Text := GetWindowsUserName;

私は得る:

[dcc32 Error] Unit1.pas(115): E2034 Too many actual parameters
[dcc32 Error] Unit1.pas(115): E2012 Type of expression must be BOOLEAN

ここで何が欠けていますか?

編集:私はまだエラーが発生しています: ここに画像の説明を入力

4

2 に答える 2

0

これを試して。

uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
- - - - - - 

{ Get current username. }
function TForm1.GetCurrentUser(): String;
var
   lpUserName: array[0..256] of Char;
   nSize: DWord;
begin
   // Get current loginname
   nSize := SizeOf(lpUserName);
   GetUserName(@lpUserName, nSize);
   Result := lpUserName;
end;

この関数を使用する必要があります。おそらく Uses imports は、似たような名前の別のものを提供します。しかし、これはオールドスクール方式です。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx

新しいメソッドは SSPI インターフェイスです。(この sspi は、実際には WinAD に対して user+pwd 値を認証しています。GetuserName は、アクティブな Windows ID を読み取るだけで問題ありません)
http://www.michael-puff.de/Programmierung/Delphi/Units/SSPIValidatePassword.pas

于 2013-10-16T14:21:41.960 に答える