Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta en Febrero 15, 2015, 06:23:02 pm

Título: Aplicativo con parametro.
Publicado por: YAcosta en Febrero 15, 2015, 06:23:02 pm
Tengo esta duda.

Tengo un aplicativo (AP1) compuesto de un formulario y un textbox.

Tengo otro aplicativo (AP2) compuesto también de un formulario y un boton.

¿Como podría hacer para que al presionar el boton AP2 levante el AP1 y ponga en el un texto que envio desde el boton de AP1?

Levantar el AP1 lo hago con shell pero ¿como le asigno parámetros? quiero que AP1 acepte el string enviado desde AP2 y que recibiré en un textbox de AP1.

-- Hasta alli ya tengo resuelto 90% de lo que necesito, a esto adicionalmente y de ser posible agregar esto --

¿Como podría hacer (ademas de lo anterior) se pueda pulsar un boton que existe en AP1?... hablamos de que tengo el codigo fuente de AP1 y AP2, no hay otras pretenciones en esto.


De momento se me ocurre resolver esto con SendKey pero queria otra opcion de ser posible.

Muchas gracias y buen domingo
Título: Re:Aplicativo con parametro.
Publicado por: Jeronimo en Febrero 15, 2015, 07:29:06 pm
Hola, Yván.
Yo hago algo parecido cuando necesito que un programa se cargue minimizado cuando se inicia Windows. A lo mejor lo podés adaptar a tu necesidad (lo tiro casi sin pensarlo, porque estoy de raje, así que disculpame si no tiene nada que ver jeje).
Código: (VB) [Seleccionar]
Public Sub Main()
    Load frmPrincipal
    If LineaComandos() Then
        frmPrincipal.Hide
    Else
        frmPrincipal.Show
    End If
End Sub

Private Function LineaComandos() As Boolean
    Dim sCommando As String
    Dim i As Integer
    Dim sTmp As String
   
    sCommando = Trim$(Command$)

    If Len(sCommando) = 0 Then Exit Function
   
    i = InStr(sCommando, "/M")
    If i > 0 Then LineaComandos = True

End Function

Y para llamar al archivo con shell le agrego " /M" a continuación del nombre: "archivoacargar.exe /M"

En cuanto a presionar un botón, ¿es al cargar el form, o con el form ya abierto? Porque si es al cargar el form podés darle un parámetro para que al arrancar ejecute  la rutina que corresponde al Boton_Click(). Si es con el form abierto, ya imagino que sería por medio de comunicación entre exes y sobre eso ya se ha hablado bastante en este mismo foro. Ahora no puedo buscar los temas, pero ni bien pueda lo hago.

Espero te sirva de algo.
Muchas gracias.

Jerónimo
Título: Re:Aplicativo con parametro.
Publicado por: Bazooka en Febrero 15, 2015, 08:36:42 pm
Es simple amigo con esto

Código: [Seleccionar]
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Y para usarla simplemente :

dim res as long
Dim NombreApp2 as string
Dim Parametros as string

Parametros = "Aca va el texto que paso"

NombreApp2 = "miApp2.exe"
res = ShellExecute(Me.hwnd, "Open", NombreApp2 , Parametros, "", 1)

mas info

http://www.jrubi.com/index.htm?trucos/tip00051.htm (http://www.jrubi.com/index.htm?trucos/tip00051.htm)
Título: Re:Aplicativo con parametro.
Publicado por: YAcosta en Febrero 15, 2015, 10:14:18 pm
Hola, Yván.
Yo hago algo parecido cuando necesito que un programa se cargue minimizado cuando se inicia Windows. A lo mejor lo podés adaptar a tu necesidad (lo tiro casi sin pensarlo, porque estoy de raje, así que disculpame si no tiene nada que ver jeje).
Código: (VB) [Seleccionar]
Public Sub Main()
    Load frmPrincipal
    If LineaComandos() Then
        frmPrincipal.Hide
    Else
        frmPrincipal.Show
    End If
End Sub

Private Function LineaComandos() As Boolean
    Dim sCommando As String
    Dim i As Integer
    Dim sTmp As String
   
    sCommando = Trim$(Command$)

    If Len(sCommando) = 0 Then Exit Function
   
    i = InStr(sCommando, "/M")
    If i > 0 Then LineaComandos = True

End Function

Y para llamar al archivo con shell le agrego " /M" a continuación del nombre: "archivoacargar.exe /M"

En cuanto a presionar un botón, ¿es al cargar el form, o con el form ya abierto? Porque si es al cargar el form podés darle un parámetro para que al arrancar ejecute  la rutina que corresponde al Boton_Click(). Si es con el form abierto, ya imagino que sería por medio de comunicación entre exes y sobre eso ya se ha hablado bastante en este mismo foro. Ahora no puedo buscar los temas, pero ni bien pueda lo hago.

Espero te sirva de algo.
Muchas gracias.

Jerónimo

mmm, no entendi amigo, la verdad creo que lo dejare asi porque no me da tiempo para investigar ya que mañana a las 8am lo tengo que entregar, perdi mucho tiempo ayer tratando de resolver el problema que publique en otro post. Igual muchas gracias, luego con calma lo pruebo pero la verdad de momento veo neblinas (¿sera por al presion? quiza si).
Título: Re:Aplicativo con parametro.
Publicado por: YAcosta en Febrero 15, 2015, 10:19:25 pm
Es simple amigo con esto

Código: [Seleccionar]
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Y para usarla simplemente :

dim res as long
Dim NombreApp2 as string
Dim Parametros as string

Parametros = "Aca va el texto que paso"

NombreApp2 = "miApp2.exe"
res = ShellExecute(Me.hwnd, "Open", NombreApp2 , Parametros, "", 1)

mas info

http://www.jrubi.com/index.htm?trucos/tip00051.htm (http://www.jrubi.com/index.htm?trucos/tip00051.htm)

Ok, debe ser que crei que a simple vista lo iba a entender pero hoy no es mi dia, desde ayer estoy que no entiendo nada, no entiendo como puede saber el aplicativo que se abre donde colocar el texto que recibe, en cual textbox poner.. de momento hay uno solo pero igual no veo como asignarle al aplicativo 2 que el texto que recibe (no se por donde lo recibe) lo debe colocar en un textbox especifico.

Mil disculpas por las molestias, pero ya no me da tiempo para investigar con riesgo a que no logre el objetivo y ya estoy con las horas contadas. Luego lo chocare con calma.

Muchas gracias.
Título: Re:Aplicativo con parametro.
Publicado por: YAcosta en Febrero 15, 2015, 10:52:42 pm
Bueno muchachos, ya lo resolví, sorry por no haberme explicado bien.

Lo que quería pasar era un parámetro de un aplicativo A a un aplicativo B. Necesitaba el codigo de como enviarlo y como recibirlo o como trabajar con el. Lo resolví asi:

En el aplicativo A debo invocar al B asi:

Código: (VB) [Seleccionar]
ProgramaB= "C:\MiProgramaB " & txtParametro
Shell ProgramaB, vbNormalFocus

Y en el aplicativo B si quiero recibirlo en un textbox llamado Text1:
(en el evento Initialice o Load, aunque yo lo usare en el Initialice)

Código: (VB) [Seleccionar]
Private Sub Form_Initialize()
Text1 = Command()   'Solo una simple linea, desconocía la función Command
End Sub

Entiendo entonces que Jeronimo indicaba el uso de Command$ (con el simbolo de $) en su código.

Y ¿que si quiero pasar varios parámetros? Alli hay que usar split:
Parametros = split(Command(), ",")  si es que la coma fuera el elemento separador. La variable Parametros ha de ser declarado como array.

El problema esta resuelto. Para disparar el evento click del boton evaluare en Initialice (mejor en Activate para no dejar el programa B medio colgado) si Text1 tiene alguna cadena y de ser asi se ejecutara boton_click, es necesario evaluar porque el aplicativo B puede ser ejecutado desde explorador de Windows sin necesidad de ser llamado por A.

Saludos
Título: Re:Aplicativo con parametro.
Publicado por: coco en Febrero 15, 2015, 11:46:54 pm
Que longitud es el texto que pasas? Porque hay un limite en lo que podes pasar como parametros. Cobein sabia de ese limite, ya que en su laburo usaban mucho eso...
Título: Re:Aplicativo con parametro.
Publicado por: YAcosta en Febrero 15, 2015, 11:51:44 pm
Que longitud es el texto que pasas? Porque hay un limite en lo que podes pasar como parametros. Cobein sabia de ese limite, ya que en su laburo usaban mucho eso...

Cortisimo doc, 11 digitos que es numero RUC que envio desde mi aplicativo al otro aplicativo (al de FrankLizardo por el problema que no pude resolver) y desde que lo envio ya valide que la cadena sea solo de 11 caracteres.
Título: Re:Aplicativo con parametro.
Publicado por: Bazooka en Febrero 16, 2015, 10:49:24 am
Yo he usado muchas veces enviar varios parametros y lo soluciono de este modo


Código: [Seleccionar]
'PARA ENVIAR EN DESDE LA APP1
Private Sub Command3_Click()
Dim Parametros As String
Parametros = Text1.Text & "@" & Text2.Text & "@" & Text3.Text
Shell Parametros, vbNormalFocus

End Sub

'PARA RECIBIR EN LA APP2
Private Sub Form_Load()
Dim Cad() As String

Cad = Split(Command, "@")
Debug.Print Cad(0)
Debug.Print Cad(1)
Debug.Print Cad(2)
End Sub
Título: Re:Aplicativo con parametro.
Publicado por: YAcosta en Febrero 16, 2015, 12:55:28 pm
Asi es doc, ese código me resulta mas entendible (ojo: roche mio), como decimos aquí: "esta como pa' brutos" y ademas que desconocía por completo la función Command(), por allí empezaba mi problema, una vez entendido eso pude ver la luz al final del camino.

Gracias

:-)
Título: Re:Aplicativo con parametro.
Publicado por: Waldo en Febrero 17, 2015, 01:28:57 pm
Donde puede complicarse, no se si es tu caso, es si ya están corriendo los 2 aplicat.  Y tenés que pasar datos uno al otro.  En ese caso alguna vez use un ExeActiveX,  de esa forma cada app compartir sus métodos y propiedades

Enviado desde mi XT1068

Título: Re:Aplicativo con parametro.
Publicado por: YAcosta en Febrero 17, 2015, 02:20:44 pm
Interesante observacion Waldo, voy a hacer las pruebas sobre eso. Si encuentro inconsistencia y puedo resolverlo lo haré... sino ordenare la restricción al usuario (o sea, le pasare la responsabilidad)

Gracias