Pegar usuário logado do windows

09/12/2008

Vamos nóis denovo....   Preciso pegar o nome do usuário logado no windows, só que a função GETLOGADO que me foi passado só funciona quando eu tenho 1 usuario logado por vez.   No xp e vista tem a opção de troca rapida de usuarios onde eu posso ter mais de um usuário logado.   Ai que está o problema, essa função sempre me retorna o primeiro que logou, mesmo eu tendo dois usuarios logados.   Eu preciso pegar o usuário que estou com a aea de trabalho ativa... é esse nome que eu preciso...         sds
Cia Papel

Cia Papel

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

09/12/2008

Luis, estarei verificando o mesmo para você. Assim que tiver um resultado respondo
GOSTEI 0
Cia Papel

Cia Papel

09/12/2008

Weslei... descobri o erro.... a fun;áo getlogado que o rodrigo tinha me passado funciona, tambem ja consegui interceptar o momento que ele faz o login, que era minha duvida num topico anterior.   So que tem mais um problema, pra variar.   Eu executo meu programa usando uma função runasuser, que eleva o nivel do usuario para administrador, quando o usuario é limitado.   Por esse motivo a fun;áo getlogado me traz o nome do usuario que eu elevei e nao o que eu estou logado, e preciso fazer isso de dentro do programa, não posso fazer por fora, tipo criar outro programa sem nivel de elevaçao.   Então o que eu gostaria é: pegar o usuario logado de dentro de um programa que foi executado com nivel de elevação de administrador.   Espero que tenha sido claro.           sds
GOSTEI 0
Guinther Pauli

Guinther Pauli

09/12/2008

Olá Luis

     Eu tenho uma função que sempre utilizei em meus projetos, experimente para ver se supre a sua necessidade:

{ Declare Windows no uses }

function NomeUsuario: string;
const
  Max = 254;
var
  Nome: string;
  Tam: DWORD;
begin
  Tam := Max - 1;
  SetLength(Nome,Max);
  GetUserName(PChar(Nome),Tam);
  SetLength(Nome,Tam);
  result := Nome;
end;

Att,

Guinther
GOSTEI 0
Cia Papel

Cia Papel

09/12/2008

Ola...   Como te disse, ela funciona perfeitamente, só que tenho uma caracteristica do meu programa, que é executar ele como usuario administrador.   Exemplo pra vc entender.     Crie um programa no delphi utilizando essa function.   Cria um usuario limitado no windows e loga nele.   Localiza o exe gerado no projeto, clica com o botao direito em cima dele, opção executar como, e escolhe o usuario que administrador ou outro qualquer que tenha nivel de administrador.   Você vai ver que ele nao traz o usuario logado e sim o usuario que vc escolheu para executar o sistema.... e eu preciso trazer o usuário logado...       sds
GOSTEI 0
Cia Papel

Cia Papel

09/12/2008

Alguma novidade com relação ao tópico?
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

09/12/2008

Olá Alexandre !!!   Ainda não, porém me diz uma coisa: Qual a necessidade de se executar o seu programa como administrator ou como outro usuário que não seja o logado ??      
GOSTEI 0
Cia Papel

Cia Papel

09/12/2008

O software que temos faz alteraçoes no registro, e muitas empresas tem em suas caracteristicas fazer com que os usuarios sejam "limitados" em suas redes, fazendo com que a ediçao do registro não seja possivel.   Ai a necessidade de fazer com que o software execute como administrador mesmo o usuário sendo limitado.   O problema é que preciso pegar o usuario logado e não o usuario administrador que o sistema elevou.....
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

09/12/2008

Realmente Alexandre a função acima retorna o nome do usuario que há executou. Estarei verificando uma outra forma de retornar o usuário logado !!! abs !!
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

09/12/2008

Olá Alexandre, como vai ???   Eu tentei todas as possibilidades aqui, inclusive com as funções que você postou no chamado 807 porém sem obter sucesso. Encaminhei seu problema para a administração. Estaremos contactando outros consultores para que possamos tentar resolver seu problema.   Agradeço a compreensão.    Obrigado !!!    
GOSTEI 0
Ricardo Boaro

Ricardo Boaro

09/12/2008

      Olá.

      Vamos lá, realmente seu "problema" é complexo, mas estamos aqui para isso mesmo, se fosse barbada vc mesmo resolveria. Entendo que a única forma de revolvermos é coletarmos algumas funções que fazem esse controle de login e testá-las, abaixo estou colocando algumas que conheço.

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; 

    Essa é uma delas, segundo meus testes aqui funciona no Windows XP.

Function usuario: string;
var
  buffer: array[0..255] of char;
  size: dword;
begin
  size := 256;
   if GetUserName(buffer, size) then
    Result := buffer
     else
      Result :=
end;

      Outra, essa funcionou no Windows Vista, mas temos que testar em sua aplicação tendo modificado o nivel de permissão do usuário.

Function TfrmMensagem.funGetNomeUser: String;
// Adicionar ao User a Classe Registry
var
  vobjRegistro : TRegistry;
begin
  vobjRegistro := TRegistry.Create;
   try 
    case Win32Platform of
     VER_PLATFORM_WIN32_WINDOWS: begin // Windows 9x
     vobjRegistro.RootKey := HKEY_LOCAL_MACHINE;
      if vobjRegistro.OpenKey(\Network\Logon, True) then 
       Result := vobjRegistro.ReadString(username);
    end;

   VER_PLATFORM_WIN32_NT: begin // Windows XP
   vobjRegistro.RootKey := HKEY_CURRENT_USER;
   if vobjRegistro.OpenKey(\Software\Microsoft\Windows\CurrentVersion\Explorer, True) then
     Result := vobjRegistro.ReadString(Logon User Name);
   end;
  end;

  finally
  vobjRegistro.Free;
  end;
end;

         Essa eu testei no XP e retornou certinho, mas vamos ver se funciona para você.

         Espero que uma das 3 resolva seu problema, enquanto você testa em sua aplicação eu vou fazer outros testes por aqui.

         Abraço e Boas Festas!!
GOSTEI 0
Ricardo Boaro

Ricardo Boaro

09/12/2008

Luis,   Resolvido seu problema ?   Podemos encerrar esse chamado ou precisa de algo mais ?   abs
GOSTEI 0
Cia Papel

Cia Papel

09/12/2008

Opa.... rapaz, entrei de ferias da empresa e volto dia 05 pra testar.........
GOSTEI 0
Ricardo Boaro

Ricardo Boaro

09/12/2008

      Luis,
      Resolvido seu problema ?  Conseguiu testar?
      Podemos encerrar esse chamado ou precisa de algo mais ?
      abs
GOSTEI 0
Cia Papel

Cia Papel

09/12/2008

bom dia... pode finalizar.... funcionou perfeitamente... obrigado
GOSTEI 0
POSTAR