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:
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.
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
Los argumentos los puedes encontrar almacenados aquí: My.Application.CommandLineArgs
Ejemplo:
' 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.
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:
#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...