Usuário Logado
Amigos e Amigas !
Estou utilizando a rotina abaixo para descobrir o usuário logado na estação naquele momento. Acontece que só está funcionando para XP e 2000 e não para 98 e 95. Alguém poderia me ajudar ou mesmo uma outra função que fizesse isso ? Talvez até a nível de registry.
Grato
function TForm1.SysUserName: string;
var
I: DWord;
begin
I := 255;
SetLength(Result, I);
Windows.GetUserName(PChar(Result), I);
Result := string(PChar(Result));
end;
Estou utilizando a rotina abaixo para descobrir o usuário logado na estação naquele momento. Acontece que só está funcionando para XP e 2000 e não para 98 e 95. Alguém poderia me ajudar ou mesmo uma outra função que fizesse isso ? Talvez até a nível de registry.
Grato
function TForm1.SysUserName: string;
var
I: DWord;
begin
I := 255;
SetLength(Result, I);
Windows.GetUserName(PChar(Result), I);
Result := string(PChar(Result));
end;
Guilherme B
Curtidas 0
Respostas
Marcio.theis
23/02/2005
Tente isto:
function LogUser : String;
{Requer a unit Registry declarada na clausula Uses da Unit}
var
Registro:TRegistry;
begin
Registro := TRegistry.Create;
Registro.RootKey := HKEY_LOCAL_MACHINE;
if Registro.OpenKey(´Network\Logon´, false) then
begin
result := Registro.ReadString(´username´);
end;
Registro.Free;
end;
GOSTEI 0
Guilherme B
23/02/2005
Já tentei este também !
A minha máquina é W2K. No registry não existe esta chave.
A minha máquina é W2K. No registry não existe esta chave.
GOSTEI 0
Marcio.theis
23/02/2005
Tente desta outra forma:
procedure PegaNetInfo;
var
BufLen : DWORD;
Buffer : PChar;
begin
BufLen := 32+1;
Buffer := #0;
try
GetMem( Buffer, BufLen );
case WNetGetUser(nil, Buffer, BufLen) of
NO_ERROR: SysInfoRec.UserConName := Buffer;
ERROR_NOT_CONNECTED: SysInfoRec.UserConName := ´Not Connected´;
ERROR_NO_NETWORK: SysInfoRec.UserConName := ´No Network´;
else SysInfoRec.UserConName := ´Other Network error´;
end;
finally
FreeMem( Buffer );
end; // try
end; {- GetNetInfo }
function NomeUsuario: string;
begin
PegaNetInfo();
Result:=SysInfoRec.UserConName;
end;
edt.Text:=NomeUsuario;
GOSTEI 0
Guilherme B
23/02/2005
Desculpe a ignorância !
Está dando erro na SysInfoRec.
Qual biblioteca eu preciso colocar na Uses ?
Está dando erro na SysInfoRec.
Qual biblioteca eu preciso colocar na Uses ?
GOSTEI 0
Marcio.theis
23/02/2005
É que eu utilizo o SysInfoRec como um Record, no caso vc declara uma variável to tipo string na seção private, como por exemplo:
depois onde tiver SysInfoRec.UserConName troque por usuario.
private
{ Private declarations }
usuario: string;
depois onde tiver SysInfoRec.UserConName troque por usuario.
GOSTEI 0