Ir para conteúdo
Fórum Script Brasil
  • 0

Listar Usuários do Windows em uma Combo pelo VB6


MDLima

Pergunta

Boa tarde pessoal,

Estou desenvolvendo um programa e preciso de um código em VB6 (só serve de for VB6) que retorne a lista de usuários do windows em uma combo.

Já tenho o código para retornar o usuário atual! Eu preciso da lista de todos os usuarios!

Grato.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
Tá difícil heim? Ninguém se habilita?

cara, você acabou de abrir o tópico, ta reclamando do q?? o usuarios do forum não são seus empregados.

alem de ter postado na sala errada...

mas respondendo, não encontrei nenhuma api q faca isso ou coisa assim (isso não significa q não exista), mas parece q o seguinte comando do prompt faz isso (chame pela funcao shellexecute()):

net user > "arquivo.txt"

ai a lista de usuarios deve ficar salva nesse arquivo.txt (escolha o nome e o diretorio q quiser). então você abre o arquivo pelo visual basic, e procura la os usuarios.

Link para o comentário
Compartilhar em outros sites

  • 0

Caro colega!!

Peço mil desculpas. É que estou ansioso por esse código!! Em nenhum momento pensei que alguém aqui seja empregado de outrem!!

Em todo caso, muitíssimo obrigado pela resposta!!

Já fiz alguns programas em VB, mas nunca precisei listar os usuários do windows (que fazem login no PC). Poderia me passar um código de exemplo?

Editado por MDLima
Link para o comentário
Compartilhar em outros sites

  • 0

beleza, mas vai com calma, ficar postando q nem loco não vai te ajudar a ter resposta mais rapido.

então, você simplesmente chama esse comando q eu passei com um shell() (eu escrevi shellexecute() no post de cima, mas o shell() tb serve e é mais simples):

Shell "cmd /C net user > ""arquivo.txt""", vbHide

eu chequei aqui e vi q esse comando mostra todos os usuarios da rede e não so os q logam no windows. isso pode atrapalhar pra vc, mas é o melhor metodo q encontrei pra listar os usuarios.

ai você abre o txt e procura os usuarios la dentro.

as 4 primeiras linhas do txt são o cabecalho. depois é q vem os usuarios. vem 3 por linha e você separa por mid().

aqui tb tem uns tutoriais pra trabalhar com arquivos texto, se você nunca fez isso, da uma olhada ai:

http://en.wikibooks.org/wiki/Visual_Basic/Files

http://www.macoratti.net/txt_arqs.htm

Link para o comentário
Compartilhar em outros sites

  • 0
beleza, mas vai com calma, ficar postando q nem loco não vai te ajudar a ter resposta mais rapido.

então, você simplesmente chama esse comando q eu passei com um shell() (eu escrevi shellexecute() no post de cima, mas o shell() tb serve e é mais simples):

Shell "cmd /C net user > ""arquivo.txt""", vbHide
eu chequei aqui e vi q esse comando mostra todos os usuarios da rede e não so os q logam no windows. isso pode atrapalhar pra vc, mas é o melhor metodo q encontrei pra listar os usuarios. ai você abre o txt e procura os usuarios la dentro. as 4 primeiras linhas do txt são o cabecalho. depois é q vem os usuarios. vem 3 por linha e você separa por mid(). aqui tb tem uns tutoriais pra trabalhar com arquivos texto, se você nunca fez isso, da uma olhada ai: http://en.wikibooks.org/wiki/Visual_Basic/Files http://www.macoratti.net/txt_arqs.htm
Valeu pela dica... valeu mesmo!!! Segue o código que montei para soluconar o problema. Conteúdo do "arquivo.txt" retornado pela função:
Shell "cmd /C net user > ""C:\arquivo.txt""", vbHide
' linha 0: em branco Contas de usu rio para \\TECSOM-2F4201D3 ' linha 1 ' linha 2 ------------------------------------------------------------------------------- ' linha 3 Administrador Convidado elis ' linha 4 HelpAssistant MArcos SUPPORT_388945a0 ' linha 5 Tecsom ' limha 6 Comando conclu¡do com ˆxito. ' linha 7 ' linha 8: Em branco
Dim i, v, n, t, r As Integer
Dim vetor As Variant


With Data1.Recordset ' Controle de dados para retornar o arquivo "arquivo.txt"
ReDim MT1(.RecordCount) 'Matriz carregada com os dados do controle de dados Data1

.MoveFirst
For n = 1 To Data1.Recordset.RecordCount - 2 ' as linhas 7 e 8  não precisam ser relacionadas
If Not IsNull(.Fields(0)) Then
        If InStr(1, .Fields(0), "contas de usu", vbTextCompare) > 0 Then GoTo pular ' código para não relacionar a primeira linha
        If InStr(1, .Fields(0), "-------------", vbTextCompare) > 0 Then GoTo pular ' código para não relacionar a segunda linha
        If InStr(1, .Fields(0), "comando concl", vbTextCompare) > 0 Then GoTo pular ' código para não relacionar a terceira linha

If t = 0 Then t = 1
MT1(t) = .Fields(0) ' serão carregadas as linhas 4, 5 e 6
t = t + 1
pular:
End If
    .MoveNext
    If .EOF Then Exit For
Next

Usuario.Clear ' Combobox usuário
Usuario.AddItem "Todos" ' Inclusão do ítem "Todos" para serem aplicadas restrições a todos os usuários


ReDim MTF(t * 2 + 1)' Matriz dimensionada com o dobro do número de linha retornadas pelo comando FOR NEXT acrescido de um

r = 0

MTF(r) = "Todos" 

'Uso da função Split para montar a combobox usuário

For v = 0 To t
                                                                                                                    
     vetor = Split(MT1(v))        


        For i = LBound(vetor) To UBound(vetor)
         
               If vetor(i) <> "" Then Usuario.AddItem vetor(i): r = r + 1: MTF(r) = vetor(i)
         
    Next

Next

If Not AdoReg.Recordset.BOF And Not AdoReg.Recordset.EOF Then Usuario = AdoReg.Recordset(2)

End With
O código funcionou muito bem. Meu problema agora são dois (espero não ter mais): 1 - Como incluir na função Shell "cmd /C net user > ""C:\arquivo.txt""", vbHide

2- Como se faz para iniciar um aplicativo qualquer (em todos os usuário registrados mo PC) junto com o windows, usando o Registro do Windows?

Mais uma vez grato aquem puder ajudar!!!

Um forte abraço,

Marcos.

Editado por MDLima
Link para o comentário
Compartilhar em outros sites

  • 0
1 - Como incluir na função Shell "cmd /C net user > ""C:\arquivo.txt""", vbHide

acho q é isso q você quer:

Shell "cmd /C net user > """ & App.Path & "\arquivo.txt""", vbHide

2- Como se faz para iniciar um aplicativo qualquer (em todos os usuário registrados mo PC) junto com o windows, usando o Registro do Windows?

a reposta pra isso esta aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=41838

Link para o comentário
Compartilhar em outros sites

  • 0

O primeiro código, para a questão do path do USER NET funcionou beleza.

Já o segundo, não. Veja como ficou:

Public Sub RegistrarPrograma()

Dim Reg As Object

Set Reg = CreateObject("wscript.shell")


Reg.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\" & "WindowsBlock", App.Path & "\" & "WindowsBlock" & ".exe"

Reg.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\" & "WindowsBlock", App.Path & "\" & "WindowsBlock" & ".exe"


End Sub

Funcionou bem em todos os usuários. No administrador, entretanto, o programa se iniciou duas vezes. Como contornar esse erro?

Grato,

Marcos

Link para o comentário
Compartilhar em outros sites

  • 0

acho q quando você setou no HKEY_LOCAL_MACHINE, ele já fica pra todos os usuarios. quando você setou no HKEY_CURRENT_USER, ele adicionou mais uma vez pro usuario logado no momento.

você so precisaria escrever uma vez no HKEY_LOCAL_MACHINE ou então você escreveria no HKEY_CURRENT_USER pra cada usuario. so precisa escrever em um deles, escolhe qual você acha melhor (acho q seria mais facil no HKEY_LOCAL_MACHINE, já q você quer pra todos os usuarios) e apagua o q você escreveu na otra, assim não fica mais carregando duas vezes.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde,

Gratíssimo pelas dicas até aqui.

Estou com um problema diferente agora:

Quando executo o programa em outro usuário (que não seja o admin) vem a mensagem de que o arquivo (no caso o banco de dados access 2000) é somente leitura! Tentei dar permissão em todos os níveis para todos os usuários mas não consegui!

Existe uma maneira de fazer isso pelo VB6?

Ou uma configuração apropriada das propriedades do banco de dados do access 2000, resolve?

Poderia me mostrar como se faz isso?

Grato,

Marcos.

Editado por MDLima
Link para o comentário
Compartilhar em outros sites

  • 0

mdlima, eu acho q isso deve ser problema de permissao do windows mesmo. acho q seu usuario não tem permissao pra alterar a pasta onde o banco ta dentro. acho q não é do visual basic não.

tenta fazer um teste. logue com esse usuario e tente salvar um arquivo de texto qualquer nessa pasta pra ver se ele permite.

ai no caso, se for do windows mesmo, e você tiver dificuldade pra conseguir dar permissao, poste na sala de windows aqui do forum explicando seu problema.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá boa tarde,

O problema está nas permissões do banco de dados access.

Como a minha aplicação tem um banco de dados pequeno eu migrei do access (.mdb) para o dbase IV (.dbf) e problema foi resolvido.

Mesmo assim, agradeço a dica.

Mas...

Parece que meus problemas não se acabarão tão cedo!

Coloquei um comando para habilitar/desabilitar a inicialização junto com o windows. No XP funcionou bem, já no windows 7 só funciona se eu execultar o programa como administrador. Caso contrário dá erro e encerra o programa.

Acho que uma diretiva que idendifique o sistema operacional e um código apropriado resolveria.

A diretiva eu sei fazer. Agora o código para dar permissão de administrador para o meu aplicativo, não!

Poderia me dizer como se faz isso em VB6 (dar permissão de administrador para um programa via código)?

Atenciosamente,

Marcos.

Link para o comentário
Compartilhar em outros sites

  • 0

você pode usar o runas (comando de linha de comando) pra executar como administrador. ai você tera q digitar a senha pelo visual basic.

nesse tópico aqui nos fizemos isso e deu certo: http://scriptbrasil.com.br/forum/index.php...st&p=503713

faca uma busca no google pela sintaxe do runas, se você não conhece o comando.

fora isso, nesse endereco tem um componente pra manipular as permissoes do windows: http://setacl.sourceforge.net/index.html

entretanto pode acabar dando mais trabalho, já q você teria q ler a documentacao pra entender como funciona.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...