GARANTIR DESCONTO

Fórum Pegar usuário logado do windows #1264

09/12/2008

0

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

Responder

Posts

09/12/2008

Wesley Yamazack

Luis, estarei verificando o mesmo para você. Assim que tiver um resultado respondo
Responder

Gostei + 0

10/12/2008

Cia Papel

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
Responder

Gostei + 0

10/12/2008

Guinther Pauli

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
Responder

Gostei + 0

10/12/2008

Cia Papel

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
Responder

Gostei + 0

12/12/2008

Cia Papel

Alguma novidade com relação ao tópico?
Responder

Gostei + 0

13/12/2008

Rodrigo Mourão

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 ??      
Responder

Gostei + 0

13/12/2008

Cia Papel

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.....
Responder

Gostei + 0

15/12/2008

Rodrigo Mourão

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 !!
Responder

Gostei + 0

23/12/2008

Rodrigo Mourão

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 !!!    
Responder

Gostei + 0

23/12/2008

Ricardo Boaro

      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!!
Responder

Gostei + 0

26/12/2008

Ricardo Boaro

Luis,   Resolvido seu problema ?   Podemos encerrar esse chamado ou precisa de algo mais ?   abs
Responder

Gostei + 0

29/12/2008

Cia Papel

Opa.... rapaz, entrei de ferias da empresa e volto dia 05 pra testar.........
Responder

Gostei + 0

05/01/2009

Ricardo Boaro

      Luis,
      Resolvido seu problema ?  Conseguiu testar?
      Podemos encerrar esse chamado ou precisa de algo mais ?
      abs
Responder

Gostei + 0

05/01/2009

Cia Papel

bom dia... pode finalizar.... funcionou perfeitamente... obrigado
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar