Regedit - Pegar usuário logado

Delphi

10/05/2006

Estou enfrentando o seguinte problema:
Fiz um programa (em Delphi 7 / WinXP) para pegar o nome do usuário
logado no sistema operacional e ele só funciona qdo roda no WinXP. Em
outros sistemas ele não pega.

segue a chave onde estou pegando a informação no regedit
[list:8fc972b067]

[color=green:8fc972b067]Win95, Win98:[/color:8fc972b067]
HKEY_LOCAL_MACHINE\Network\Logon, ´username´

[color=green:8fc972b067]WinNT4:[/color:8fc972b067]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon, ´DefaultUserName´

[color=green:8fc972b067]Win2k:[/color:8fc972b067]
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer, ´Logon User Name´
[/list:u:8fc972b067]

Alguém já passou por esse problema e conseguiu resolver?

Toda ajuda é bem-vinda


Angelnoa

Angelnoa

Curtidas 0

Respostas

Massuda

Massuda

10/05/2006

A princípio, isto deveria funcionar sem problemas...
function PegarNomeDoUsuario: string;
const
  TamanhoMaximo = 256;
var
  S: string;
  Tamanho: dword;
begin
  Tamanho := TamanhoMaximo;

  SetLength(S, Tamanho);
  if GetUserName(PChar(S), Tamanho) then begin
    SetLength(S, Tamanho);
    Result := S;
  end;
  else
    Result := ´´
end;



GOSTEI 0
Adriano Santos

Adriano Santos

10/05/2006

A princípio, isto deveria funcionar sem problemas...
function PegarNomeDoUsuario: string;
const
  TamanhoMaximo = 256;
var
  S: string;
  Tamanho: dword;
begin
  Tamanho := TamanhoMaximo;

  SetLength(S, Tamanho);
  if GetUserName(PChar(S), Tamanho) then begin
    SetLength(S, Tamanho);
    Result := S;
  end;
  else
    Result := ´´
end;



Eu uso este algoritimo do Massuda e funciona perfeitamente.


GOSTEI 0
Angelnoa

Angelnoa

10/05/2006

Valeu pela força! Só tem um problema... é que esta função está acrescentando #0 ao final.

var usuario: String;
begin
  usuario := PegarNomeDoUsuario;
  .
  .
  .
end;


a varíavel fica assim: usuario=´angela´0
Como resolvo isso?


GOSTEI 0
Adriano Santos

Adriano Santos

10/05/2006

Valeu pela força! Só tem um problema... é que esta função está acrescentando #0 ao final.
var usuario: String;
begin
  usuario := PegarNomeDoUsuario;
  .
  .
  .
end;
a varíavel fica assim: usuario=´angela´0 Como resolvo isso?


Tenta converter para String assim:
  String(usuario);



GOSTEI 0
Angelnoa

Angelnoa

10/05/2006

Poxa Adriano, não deu certo :cry:
Já tentei com StringReplace, mas tbm não foi.


GOSTEI 0
Massuda

Massuda

10/05/2006

...esta função está acrescentando #0 ao final.
Esqueci da convenção do Windows de usar 0 no final das strings... mude o código assim...
...
  if GetUserName(PChar(S), Tamanho) then begin 
    SetLength(S, Tamanho - 1);  // descarta o 0 do final
    Result := S; 
  end
...



GOSTEI 0
Angelnoa

Angelnoa

10/05/2006

Agora foi!

Muito obrigada!!!!!!!!!! :D


GOSTEI 0
POSTAR