Recibir comandos en el formulario por línea de comando

Iniciado por Crazy.sx, 29 Julio 2013, 07:04 AM

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

Crazy.sx

Bueno, estaba viendo algo sobre argumentos y probé que usando una variable tipo string y con command() puedo recibir comandos desde otro formulario o por consola.

En el proyecto tengo algo simple como esto:

Código (vbnet) [Seleccionar]
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim comando As String
        comando = Command()

        If comando = "prueba1" Then msgbox("Se recibió palabra PRUEBA1")
        If comando = "prueba2" Then msgbox("Se recibió palabra PRUEBA2")
    End Sub


Y haciendo desde consola:

Citaraplicacion.exe prueba1
aplicacion.exe prueba2

¡Funciona!. El tema es que se abre un proceso para cada vez que le paso los argumentos.

Yo quisera hacer que, la aplicación, mientras esté siendo ejecutada reciba los comandos o argumentos que le esté enviando las veces que quiera sin que tenga que cerrarse y volverse a abrir.

He intentado poner la función en otros eventos del formulario pero no he conseguido hacer que funcione, siempre termina ejecutándose otro proceso diferente.

Hasta he probado hacer que mi aplicación sea de instancia única, pero tampoco.

Espero que se haya entendido y espero que me puedan ayudar en este problema que tengo.

Saludos.
Destruir K. LOL

raul338

Lo que tienes que hacer es detectar si ya hay otra instancia de tu aplicacion y comunicarte con ella para pasarle los datos. Hay varias formas, sockets, sendmessage, etc

Enviado desde mi LG-E612g

Eleкtro

Los argumentos los puedes encontrar almacenados aquí: My.Application.CommandLineArgs

Ejemplo:
Código (vbnet) [Seleccionar]

   ' Loop through all the command line arguments given.
   For I As Integer = 0 To My.Application.CommandLineArgs.Count - 1
       ' If an argument equals "/m"
       If My.Application.CommandLineArgs.Item(I).ToLower = "/m" Then
           MsgBox("You have used /m")
       Else ' If it doesn't equal "/m"
           MsgBox("Incorrect CMD Argument.")
       End If
   Next


Si estás usando un WinForm y quieres recibir argumentos puedes hacer dos cosas:
1. Setear el proyecto como "ConsoleApp", lo cual adjuntará una molesta ventana del a CMD cada vez que inicies tu app.
2. Adjuntar una instancia de la consola manualmente si tu proyecto es llamado desde la CMD.

Código (vbnet) [Seleccionar]
   Declare Function AttachConsole Lib "kernel32.dll" (ByVal dwProcessId As Int32) As Boolean
   Declare Function FreeConsole Lib "kernel32.dll" () As Boolean

   AttachConsole(-1) ' Attach the console
   System.Console.Writeline("I am writing from a WinForm to the console!")
   FreeConsole() ' Desattach the console


Para saber si tu aplicación se ha llamado desde la consola puedes hacer esto:

Código (vbnet) [Seleccionar]
#Region " App Is Launched From CMD? "

   ' [ App Is Launched From CMD? Function ]
   '
   ' // By Elektro H@cker
   '
   ' Examples:
   ' MsgBox(App_Is_Launched_From_CMD)
   ' If App_Is_Launched_From_CMD() Then Console.WriteLine("Help for this application: ...")

   Declare Function AttachConsole Lib "kernel32.dll" (ByVal dwProcessId As Int32) As Boolean
   Declare Function FreeConsole Lib "kernel32.dll" () As Boolean

   Private Function App_Is_Launched_From_CMD() As Boolean
       If AttachConsole(-1) Then
           FreeConsole()
           Return True
       Else
           Return False
       End If
   End Function

#End Region


Saludos...