Usuário com melhor resposta
Enviar parâmetros a outro aplicativo

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") --> UsuarioSendKeys ("*") ---> 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:16Moderador -
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:11Moderador
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 SubSub 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:26Moderador -
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:16Moderador -
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:11Moderador -
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