MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


4 participantes

    Pegar numero da sessão de usuário (Session ID)

    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 14/5/2021, 11:15

    Aqui no fórum tem bons exemplos de como pegar o nome do PC e do usuário. Ex.:

       strNome = Environ$("computername")
       strUser = Environ$("username")



    Preciso pegar o "número da sessão" do(s) usuários logados no PC.


      strSessionID = ?????         (Fulano=1, Ciclano=2, etc...)

    O objetivo é fazer um código para enviar um Logoff do usuário strUser a partir do seu strSessionID  (Tenho feito logoff pelo numero, já que pelo nome não funciona; uso atualmente um comando via BAT ]LOGOFF 3 /Server:NomePc /V]  Mas estou trabalhando para Fazer isso via VBA. 



    Agradeço desde já!

    crysostomo gosta desta mensagem

    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  DamascenoJr. 14/5/2021, 23:57

    alecardoso escreveu:Tenho feito logoff pelo numero, ...; uso atualmente um comando via BAT
    Como você descobre o session que atualmente já usa no bat para fazer logoff pelo número?


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2678
    Registrado : 23/01/2018

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  crysostomo 15/5/2021, 01:43

    boa noite, Daamasco como é o seu bata para isso? Seria bem melhor do que ficar dentro do Bd,


    .................................................................................
    Obs.: Coloque somente as partes defeituosas para que possamos encontrar e entender  o problema mais rápido para lhe ajudar. Disponho.
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.

    crysostomo gosta desta mensagem

    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 15/5/2021, 11:00

    Crysostomo

    O colega Damasceno e não Damasco como digitou não disse que tem um arquivo.bat.

    Ele está perguntando ao autor do tópico como ele consegue pegar

    a variável pelo arquivo.bat dele.

    Por favor releia o tópico, e tenha um pouco mais de capricho ao digitar suas dúvidas.


    AleCardoso

    Expondo minha opinião

    Sou sempre pelo simples, pra que complicar?
    Somente uso de algo externo do Access, se não puder fazer por ele próprio, e mesmo
    assim, no caso do arquivo.bat, crio o mesmo pelo Access.

    Ao invés de usar a variável Environ$(), por quê não cria uma variável Pública  NomeUsuario ou id_Usuário para o usuário que está logando no momento, a qual poderá utilizar a qualquer momento dentro do Access?

    Para o nome do computador, disponibilizo a função, mais abaixo, que deve ser colocado num módulo básico.

    Outra coisa:
    Imagine um cenário que um ou mais usuários estão em meio a uma operação e você da um comando de logoff no sistema deles.
    No mínimo, para não dizer o pior, ele irão ficar muito "contentes" Mad  contigo.
    O melhor a fazer é enviar um aviso no sistema (que não atrapalhe a digitação dele no momento) dizendo que em  X minutos
    o sistema será fechado para manutenção.

    Por isso, não uso esse expediente.

    Só utilizo fechar  o sistema das estações de trabalho, quando faço uma atualização no FE e preciso substituí-los.
    Caso tenha interesse, me avise, que explico como fazê-lo.

    { }'s

    Balem

    Código:

    Option Compare Database
    Option Explicit
    'GetComputerName lê o nome do computador e o coloca na variável
    'string lpBuffer. A função retorna 0 se falhar e 1 se funcionar.

    '====Se o teu windows for de 32 bits, tire a palavra Ptrsafe da linha de baixo. ===============
    Private Declare PtrSafe Function GetComputerName Lib "Kernel32" Alias _
        "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    Function ComputerName() As String
    Dim RetVal As Long, lngLen As Long
    Dim strCompName As String
        ' O tamanho máximo para o nome é 15,
        ' sendo que a string precisa ser de 15+1.
        lngLen = 16
        strCompName = Space(lngLen)
        ' Passa o nome obtido para a variável strCompName.
        RetVal = GetComputerName(strCompName, lngLen)
        If RetVal <> 0 Then
            ComputerName = Left$(strCompName, lngLen)
        Else
            ComputerName = ""
        End If
    End Function


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2678
    Registrado : 23/01/2018

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  crysostomo 15/5/2021, 23:36

    Boa noite Belem, ai tem que brigar com os corretores do android, kkkkk .
    Porque você escreve certo, mas o próprio android coloca no erro.
    vou verifica  esse código e reteno.


    .................................................................................
    Obs.: Coloque somente as partes defeituosas para que possamos encontrar e entender  o problema mais rápido para lhe ajudar. Disponho.
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 16/5/2021, 00:20

    Crysostomo

    Então, tá perdoado!! Razz Razz

    Balem


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.

    crysostomo gosta desta mensagem

    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 16/5/2021, 12:29

    Oi pessoal, obrigado pelo retorno!

    - Sobre os usuários ficarem "contentes" kkkk... eu explico.   O Logoff não é feito inadvertidamente, isto é, todos recebem 3 avisos antes de isto acontecer.  P. ex., o expediente termina às 12h, e eles recebem aviso da proximidade do termino às 11:40,  11:50 e  12:00 (pelo agendador de tarefas do Windows [10]);  A empresa não permite horas extras.  Ainda assim, caso um colaborador esteja em meio a uma tarefa importante e que necessite permanecer conectado por mais algum tempo, ele avisa o adm que então anula o desligamento por mais tanto tempo.  É importante não ter usuários logados, não só pelas horas extras, mas também para certas rotinas de bkp e manutenção, etc.
    - Sobre usar "algo externo do Access", eu também não gosto, mas me obrigo justamente por não conhecer todas as possibilidades do Access.  Quero MUITO  sunny  aprender outras formas!!  

    - Sobre postar ou não postar aqui o código (*.cmd; *.bat), não é receio de alguém copiar a ideia (como poderia pretender aprender aqui, se também não colaborar?). Apenas  não quis poluir a introdução e não cansá-los...  Eis o código:

    Para Logoff, o agendador dispara uma BAT contendo 15 linnhas:
    C:
    cd\
    cd \WINDOWS\system32LOGOFF 15 /Server:NomePc /V

    LOGOFF 14 /Server:NomePc /V
    13...12... até...
    LOGOFF 2 /Server:NomePc /V
    exit


    - O LOGOFF do nº 1 não é feito. Pois "1" é o meu ID que, para ficar como "1", tenho que me logar antes de todos, mas nem sempre consigo, então, a BAT fica prejudicada.  Se eu me logar e ficar como "2" ou maior, ele faz logoff de mim também ...kkk vou rir pra não chorar



    - Respondendo à pergunta do DamascennJr: não consigo pegar a ID, simplesmente a BAT faz logoff de 15 até 2, sem saber quem é quem


    - Para enviar mensagem pela rede, também pelo agendador, chama uma BAT com o seguinte código:
    C:
    cd\
    cd C:\Windows\WinSxS\amd64_microsoft-windows-t..commandlinetoolsmqq_31bf3856ad364e35_10.0.18362.1_none_fb86e15d293d8d62
    @MSG * /SERVER:NomePC "Está quase na hora do descanso..."
    @exit


    Mas por que preciso da ID da sessão?   Porque certos comandos do DOS, simplesmente não funcionam apenas com o "nome" do usuário, mas funcionam com NumeroID.  Também

    'imagino criarmos uma função que consiga listar tanto o número da ID quando nome do usuário, de quem estiver logado

    Public Function IDsession()
       'comandos...
    End Function

    'Digamos que obteve:
        7 = AleCardoso
        2 = João
        1 = Maria
        4 = Fulano

    If IDsession <> "AleCardoso" Then
        'Enviar mensagem...
        'Fazer Logoff... para cada
    End If
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 16/5/2021, 13:08

    AleCardoso (Alexandre?)

    Talvez seja isso que você está procurando:

    Código:


    Public login As login
    Type login
        id  As Long
        Usuario As String * 50
        idGrupo As Long
    End Type

    Lógico que  as variáveis do usuário pega-se no momento do logon dele.
    Um exemplo; Veja no código, que utilizo uma combobox com o nome de todos os usuários do sistema.
    Menos o do desenvolvedor, o qual fiz um macete para somente aparecer o nome quando digitar meu nome
    na combobox.
    Código:

    'repassa a identificação do usuário para a variável login
            login.id = .Column(0)  'IdUsuário
            login.Usuario = .Column(1) 'Nome do usuário
            login.idGrupo = .Column(3) 'Grupo do usuário
            'esconde o formulário login
            Me.Visible = False

    { }'s

    Balem


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 16/5/2021, 14:14

    Oi Noobezinho!   (sim, Alexandre)

    Deve ser algo tão óbvio que me dá vergonha de perguntar novamente...kkk  Mesmo assim:  como fazer isto funcionar, obter ou passar para uma variável essas informações que tem no seu código?

    'TESTANDO NA VERIFICAÇÃO IMEDIATA:
    ...
    MsgBox login.id ?
    MsgBox login.id.Column(0)
    MsgBox login.Usuario

    Meu banco de dados não requer senha para logar.  Simplesmente o banco pega o nome do usuário do seu login no windows.  Quando o banco abre, executa uma verificação simples:  Se  Environ$("username") está dentro de uma "lista de nomes no módulo" Então abre, senão o banco se fecha. (DoCmd.Quit)
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 16/5/2021, 14:45

    Alexandre

    Acredito que tenha o código do usuário, se não tiver, providencie.
    Todos os dados no Access deve ter sua IDentificação única, para evitar erros de digitação.

    Num módulo básico na pagina do VBA (clique no ícone do lado do icone chave do Access, para inserir um módulo)
    e copie e cole:

    Public login As login
    Type login
       id  As Long
       Usuario As String * 50
    End Type

    No formulário de login, crie uma combobox  cbo_usuário
    Na propriedade origem da linha uma consulta ou instrução SQL com
    os campos id_Usuário e Nome

    No botão ok do formulário coloque:

    With Me!cboUsuário

          'repassa a identificação do usuário para a variável login
           login.id = .Column(0)  'IdUsuário
           login.Usuario = .Column(1) 'Nome do usuário

    End With

    Pronto, a partir do momento que o usuário faz o logon ,  a variável login estará com os dados.

    Balem


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 18/5/2021, 10:44

    Noobezinho,

    Em seu exemplo, não irá pegar a ID da sessão do usuário "do windows", mas se vc puder adaptar estou anexando um banco de exemplo, referente ao seu botão "OK".

    No "fmTeste" tem um botão mensagem para testar aquilo que já conseguimos, e só falta a ID.

    Encontrei um código que, se conseguirmos compreender e adaptar, talvez resolva.  o Link é:  https://habibs-solomon-blog.blogspot.com/2006/03/terminal-server-client-id.html

    Ps. como se faz aqui no tópico para colar o código separadamente do texto da mensagem, do mesmo modo que fez em seus exemplos acima?

    Grato!
    Anexos
    Pegar numero da sessão de usuário (Session ID) AttachmentBancoTesteUsuario.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (49 Kb) Baixado 11 vez(es)
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 18/5/2021, 11:15

    Mano

    Faltou o principal, a(s) tabela(s).

    "como se faz aqui no tópico para colar o código separadamente do texto da mensagem, do mesmo modo que fez em seus exemplos acima?"

    Veja a barra de ícones acima do retângulo de edição de mensagem.
    Começa com B = Bold = Negrito
    Vá passando o mouse sobre os ícones e verá os nomes deles, até encontrar Code.
    Ao clicar nele irá aparecer isso:

    [c o d e][ /c o de]

    Veja que coloquei espaços entre os caracteres, para vc poder ver o código

    separe os dois, ou seja o inicio do code(código) do final:

    [c o d e]
    ...
    ...
    Coloque e teu código entre eles.
    --
    ...
    [/ c o d e]

    se eu tirar os espaços vai exibir assim:

    Código:

    ...
    ...
    Coloque e teu código entre eles.
    --
    ...


    Obs.: Na janela imediata o ponto de interrogação vem por primeiro, quer dizer Print ou Exiba.
    ? login.Name
    Fulano de Tal

    Aguardando...


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 18/5/2021, 13:20

    Oi!  Amigo, não é que eu tenha esquecido das tabelas.  Não me dei o trabalho de criar tabela para o exemplo em questão, pois nem conseguimos ainda capturar a "id session" do usuário (Logado no windows) e a seguir passar para uma variável.

    Posteriormente até podemos armazenar a informação obtida em alguma tabela qualquer, mas no momento meu problema é capturar a ID do usuário do windows, como na foto que estou anexando.   No banco que enviei anteriormente, naquele botão de MSG, fiz uma forma de obter, do Windows, o Usuário e o nome da máquina... Só me falta saber como pegar a ID agora... Wink

    Aqui no fórum encontrei função até para pegar o IP da máquina, mas nada sobre NúmeroID da sessão

    Chegaste a dar uma olhada neste exemplo: (https://habibs-solomon-blog.blogspot.com/2006/03/terminal-server-client-id.html)
    Anexos
    Pegar numero da sessão de usuário (Session ID) AttachmentCapturar.PNG
    Você não tem permissão para fazer download dos arquivos anexados.
    (13 Kb) Baixado 6 vez(es)
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 18/5/2021, 14:18

    Alexandre

    Para testar esses códigos, eu teria que estar numa estação de trabalho ou no windows server.

    Como trabalho em casa, não tenho como testar sem o ambiente de rede, infelizmente.

    Vamos ver se algum membro que trabalhe nesse ambiente venha a te ajudar.

    Sinto muito!

    { }'s





    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 18/5/2021, 15:48

    Noobezinho

    Uma hora a gente vai conseguir, e agradeço pelo esforço prestado até aqui.  

    Mas se ainda quiser tentar, garanto que  não precisa de rede, nem de servidor.  Só precisa da máquina local, o pc de casa mesmo, com windows10 ou 7, não precisa nem internet.   Pois tudo o que queremos está local com um windows comum.

    Cenário:  Loga-se no PC em casa, e o windows, no gerenciador de tarefas lhe mostrará seu nome de usuário e a id da sessão no console e provavelmente o windows lhe atribuirá a ID "1" por ser o primeiro ou único logado.      Caso queira logar com mais um usuário, para teste, faça a troca de usuário, sem fazer logoff do primeiro, e o windows vai atribuir a ID "2" por exemplo, e assim por diante.   Mas já basta um único usuário, para efeito de teste, ou seja, não precisamos de rede nem de muita gente logado.

    Enfim...deve ter alguma maneira de conseguirmos essa ID poxa vida (se possível pegar nome do PC, número do IP, usuário, e tem gente que tem função até para pegar o serial do HD, por que não conseguiríamos esse bendito ID kkkk)
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 19/5/2021, 00:00

    Alexandre

    "Sou brasileiro e não desisto nunca!" Razz

    Tai as funções para o nome do usuário do windows e a sessão dele.

    Se teu windows for de 32 bit, retire o PtrSafe deixando apenas Declare Function

    No módulo básico:
    User Name

    Código:

    Declare PtrSafe Function WNetGetUser Lib "mpr.dll" _
     Alias "WNetGetUserA" (ByVal lpName As String, _
     ByVal lpUserName As String, lpnLength As Long) As Long

    Const NoError = 0          

    Function GetUserName() As String

      Dim LUserName As String
      Const lpnLength As Integer = 255
      Dim status As Integer
      Dim lpName

      ' Assign the buffer size constant to lpUserName.
      LUserName = Space$(lpnLength + 1)

      ' Get the log-on name of the person using product.
      status = WNetGetUser(lpName, LUserName, lpnLength)

      ' See whether error occurred.
      If status = NoError Then
         ' This line removes the null character. Strings in C are null-
         ' terminated. Strings in Visual Basic are not null-terminated.
         ' The null character must be removed from the C strings to be used
         ' cleanly in Visual Basic.
         LUserName = Left$(LUserName, InStr(LUserName, Chr(0)) - 1)

      Else
         ' An error occurred.
         MsgBox "Unable to get the name."
         End
      End If

      GetUserName = LUserName

    End Function

    ´
    SessãoID

    Código:

    Private Declare PtrSafe Function WTSGetActiveConsoleSessionId Lib "Kernel32.dll" () As Long
    Function SessãoWindowsID()
       MsgBox WTSGetActiveConsoleSessionId
    End Function


    { }'s

    Balem


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 1/6/2021, 10:15

    E então Alexandre

    Como ficamos??




    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 9/6/2021, 11:48

    Olá! Colei o código em um módulo, e na janela de verificação imediata, executei: PRINT SessãoWindowsID()

    Apareceu o número "1".   (e de de fato o meu ID no windows era 1 !! (já o coração acelerou...kkk)

    Aí alternei a para outros usuários (Fulano: 2,  Ciclano: 3, etc) e executei novamente: PRINT SessãoWindowsID()

    Só que retorna sempre "1"   hehehe...
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 9/6/2021, 11:56

    Ao que parece, ficou na mesma sessão e só mudou o usuário dela.

    Para ter outras sessões, abra uma ou mais vezes o aplicativo. tendo duas ou mais instâncias (sessões do mesmo).

    Na janela imediata:

    ? SessãoWindowsID

    ? = Print

    Editando:

    Se abrir uma vez a sessão será a de nº 1 e se fechar o programa, não existe sessão.

    Ficar mudando o usuário, não irá modificar a sessão.

    Então a cada abertura do aplicativo será adicionado 1 sessão.

    Entendido?


    Aguardo...


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 9/6/2021, 16:25

    Muito bom!  Eu diria que avançamos muito!    "WTSGetActiveConsoleSessionId"    talvez: "WTSGetTS?Terminal?RDP?SessionId" 

    Essa "WTSGetActiveConsoleSessionId" provavelmente pega a informação dentro de uma DLL.   Então, quando estou na máquina (fisicamente no console) aí ele pega direitinho a id, exatamente.

    Mas quando eu ou outros usuários nos conectamos na maquina (via área remota do windows)  daí esse  '? SessãoWindowsID' não devolve a informação da ID tal qual mostrada no gerenciador de tarefas do windows da maquia remota; 

    É interessante perceber que   '? SessãoWindowsID'  está mostrando sempre a ID do console local.

    Cenário1: Estou no console (MáquinaVENDAS) e executo a função.  Ele mostra a ID do usuário de MáquinaVENDAS. Até aqui correto e previsto.

    Cenário2: A) Vou no console (MáquinaESTOQUE)   B) me conecto e acesso remotamente a MáquinaVENDAS (por VNC, Tight, MSTSC, etc., não faz diferença)   C) e executo a função no Banco que também está em máquinaVENDAS.  Qual ID de usuário é esperado que seja mostrado, a máquina local (MáquinaESTOQUE) ou a ID na máquina remota (MáquinaVENDAS) ???    Eu diria que devia mostrar a ID do usuário de MáquinaVENDAS, porém ele sempre mostra a ID do console do local de partida, independetemente de qual maneira foi usado conectar no destino.  O esperado é que mostre a ID do usuário de MáquinaVENDAS !

    Talvez se conseguirmos adaptar, poderíamos dizer à função se queremos o ID-User-sessao-local   ou a  ID-User-sessao-destinoPegar numero da sessão de usuário (Session ID) 1f600
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 9/6/2021, 21:24

    Alexandre

    Verifique se aparecem as sessões dos outros computadores, no teu windows, quando

    ele estiverem conectados no aplicativo via VNC.

    Obs.: Private Declare PtrSafe Function WTSGetActiveConsoleSessionId Lib "Kernel32.dll" () As Long

    Sim, é dessa DLL.

    Aguardo.


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    alecardoso
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 31
    Registrado : 15/05/2015

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  alecardoso 24/6/2021, 23:33

    Noobezinho,

    Será que essa DLL não fornece outras informações além de "WTSGetActiveConsoleSessionId" ???

    CONFIRMADO :  WTSGetActiveConsoleSessionId  (está pegando a ID física de origem/cliente)

    Continuo procurando a ID do usuário lá no destino/Host

    Supostamente : WTSGetActiveTERMINALSessionId ou..
    Supostamente : WTSGetActiveRDPSessionId ou..
    Supostamente : WTSGetINActiveRDPSessionId ou..
    Supostamente : WTSGetActiveAlgumaCoisaSessionId  Pegar numero da sessão de usuário (Session ID) 1f600
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Noobezinho 25/6/2021, 02:16

    Não respondeu o que perguntei.

    Veja se no Windows do computador onde está a aplicação,

    se aparece as sessões do outros computadores no gerenciador

    de tarefas.

    Caso não apareça, não adianta usar o VNC, ou

    terá que fazer uma tabela de usuários logados.

    Cada usuário que logar, será gravado seu nome ou ID na tabela.


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  DamascenoJr. 25/6/2021, 16:40

    Venho acompanhando o tópico há um tempo. Infelizmente não tenho esse cenário para ajudar.

    Mas a solução proposta pelo mestre Noobezinho resolve.

    Basta criar um banco de dados que deixe a janela do Access oculta, e tendo uma tabela que salve o numero da sessão e o nome do usuário. Nesse banco de dados ter um formulário principal que é acionado na abertura.

    1 - O banco é aberto no logon do usuário, ficando oculto.
    2 - O formulário é aberto juntamente com o banco, salvando o nome do usuário e tendo o número sequencial de sessão.
    3 - No logoff do usuário, com o banco sendo encerrado por essa ocasião, no evento "ao fechar" do formulário, excluir o registro que foi adicionado na tabela.

    Isso resolve o problema.

    Pois creio que os membros ativos e participantes do fórum dificilmente terão o cenário tal qual o seu para fazer testes e elaborar solução diferente.

    Bons estudos.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    Conteúdo patrocinado


    Pegar numero da sessão de usuário (Session ID) Empty Re: Pegar numero da sessão de usuário (Session ID)

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 29/4/2024, 13:37