Autor Tema: Aplicativo con parametro.  (Leído 7320 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Aplicativo con parametro.
« 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
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Aplicativo con parametro.
« Respuesta #1 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
« última modificación: Febrero 15, 2015, 07:32:17 pm por Jeronimo »

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Aplicativo con parametro.
« Respuesta #2 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
« última modificación: Febrero 15, 2015, 08:44:13 pm por Bazooka »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Aplicativo con parametro.
« Respuesta #3 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).
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Aplicativo con parametro.
« Respuesta #4 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

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.
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Aplicativo con parametro.
« Respuesta #5 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
« última modificación: Febrero 15, 2015, 11:15:36 pm por YAcosta »
Me encuentras en YAcosta.com

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Aplicativo con parametro.
« Respuesta #6 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...
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Aplicativo con parametro.
« Respuesta #7 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.
Me encuentras en YAcosta.com

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Aplicativo con parametro.
« Respuesta #8 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
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Aplicativo con parametro.
« Respuesta #9 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

:-)
Me encuentras en YAcosta.com

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Aplicativo con parametro.
« Respuesta #10 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


YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Aplicativo con parametro.
« Respuesta #11 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
Me encuentras en YAcosta.com