locked
Enviar parâmetros a outro aplicativo RRS feed

  • Pergunta

  • Olá!

     

    Tenho um sistema em Access XP onde estou tentando fazer o seguinte :

    ao clicar em um botão de um formulário,será "chamado" um aplicativo de terceiros (com tela tipo MS-DOS) onde pede usuario e senha.Gostaria de enviar usuario  e senha via comando Shell ou Sendkeys,mas não funcionou,pois qdo o aplicativo "abre" e a janela do mesmo fica ativa,nada acontece...ou seja,  parece que os parâmetros "não chegam" ao destino.

     

    A linha de código associada ao botão é :


    RetVal = Shell("C:\PROG.EXE", vbNormalFocus)
     SendKeys ("U") --> Usuario

     SendKeys ("*") ---> Senha

     

    Se alguém puder me ajudar,desde já muito obrigado!

    segunda-feira, 24 de março de 2008 13:33

Respostas

  • Veja apenas se ele funciona com linhas de comando (sem interface gráfica), e como devem ser construídas as linhas.

     

    A maior parte dos programas em DOS funciona com linhas de comando.

     

    Exemplo de linha de comando para ARJ:

     

    'A linha abaixo deve ser usada com o Arj.exe
    'Call MeuShell("C:\Util\Arj.exe a -vva -r -y -i1 " _
    '& """" & arqDestino & """ " & """" & arqOrigem & """", 1)


    quarta-feira, 26 de março de 2008 03:16
    Moderador
  • Se não conseguir com SendKeys e Sleep, você pode usar a ferramenta AutoHotKey para criar um pequeno script de "robô" que será capaz de abrir a janela do DOS, aguardar, digitar os dados e disparar o Enter.

     

    Este script é compilado num pequeno executável que não precisa de instalação, portanto basta sua aplicação fazer o Shell deste executável que ele cuida do resto.

     

    O AutoHotKey é gratuito.

     

    quarta-feira, 26 de março de 2008 19:11
    Moderador

Todas as Respostas

  • Olá,

     

    o ideal é você saber como o outro programa espera receber os parâmetros para que você os passe por linha de comando. Exemplo: Shell("C:\PROG.EXE minhasenha", vbNormalFocus)

    Outro caminho seria você gerar um pequeno BAT com os comandos necessários, mas aí cai na mesma situação: como devem ser passados os parâmetros?

     

    O uso de SendKeys é a forma menos confiável, pois as teclas são enviadas de forma assíncrona, o Access não vai esperar abrir a janela do DOS para depois enviar as teclas. Se for seguir este caminho, pause o código por alguns segundos antes de fazer o SendKeys.

     

    Para pausar o código, pode usar a API Sleep:

     

    Code Snippet

    '***************** Code Start *******************
    ' This code was originally written by Dev Ashish.
    ' It is not to be altered or distributed,
    ' except as part of an application.
    ' You are free to use it in any application,
    ' provided the copyright notice is left unchanged.
    '
    ' Code Courtesy of
    ' Dev Ashish
    '
    Private Declare Sub sapiSleep Lib "kernel32" _
            Alias "Sleep" _
            (ByVal dwMilliseconds As Long)

    Sub sSleep(lngMilliSec As Long)
        If lngMilliSec > 0 Then
            Call sapiSleep(lngMilliSec)
        End If
    End Sub

    Sub sTestSleep()
    Const cTIME = 1000 'in MilliSeconds
        Call sSleep(cTIME)
        MsgBox "Before this Msgbox, I was asleep for " _
            & cTIME & " Milliseconds."
    End Sub
    '***************** Code End *********************

     

     

     

    terça-feira, 25 de março de 2008 13:26
    Moderador
  •  

    Obrigado pelo retorno Luiz Cláudio!

     

    Tentei dar tempo de espera antes do SendKeys,mas também não funciona,pois aparentemente a simulação de teclado não "engana" ele (o programa tipo MS-DOS).Ele fica parado e só responde mesmo pelo teclado....

     

    Quanto a outra opção que vc citou  de "como o outro programa espera receber os parâmetros ..." poderia explicar melhor por favor?Como assim como ele espera? Vc se refere ao tipo de "read" que ele faz ?

     

    Obrigado!

     

     

     

    terça-feira, 25 de março de 2008 18:22
  • Veja apenas se ele funciona com linhas de comando (sem interface gráfica), e como devem ser construídas as linhas.

     

    A maior parte dos programas em DOS funciona com linhas de comando.

     

    Exemplo de linha de comando para ARJ:

     

    'A linha abaixo deve ser usada com o Arj.exe
    'Call MeuShell("C:\Util\Arj.exe a -vva -r -y -i1 " _
    '& """" & arqDestino & """ " & """" & arqOrigem & """", 1)


    quarta-feira, 26 de março de 2008 03:16
    Moderador
  • Entendi a sua colocação,mas no meu caso parece-me que o programa não aceita linhas de comando....Acho que a única maneira seria enviar SendKeys ou algo semelhante.

     

    Fiz o teste com o ARJ e funcionou sem problemas.

     

    Em todo o caso obrigado pela ajuda!

     

     

    quarta-feira, 26 de março de 2008 13:15
  • Se não conseguir com SendKeys e Sleep, você pode usar a ferramenta AutoHotKey para criar um pequeno script de "robô" que será capaz de abrir a janela do DOS, aguardar, digitar os dados e disparar o Enter.

     

    Este script é compilado num pequeno executável que não precisa de instalação, portanto basta sua aplicação fazer o Shell deste executável que ele cuida do resto.

     

    O AutoHotKey é gratuito.

     

    quarta-feira, 26 de março de 2008 19:11
    Moderador
  • Luiz Cláudio, esse AutoHotkey é realmente fantástico!Funcionou certinho.....

    Recomendo essa ferramenta a todos que precisarem de uma solução semelhante!

    Fiquei muito feliz com o resultado e lhe agradeço muito pela dica.

    Muito obrigado pela valiosa ajuda!!!

     

    quinta-feira, 27 de março de 2008 13:05