Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Crazy.sx en 29 Julio 2013, 07:04 am



Título: Recibir comandos en el formulario por línea de comando
Publicado por: Crazy.sx en 29 Julio 2013, 07:04 am
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
  1.        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.        Dim comando As String
  3.        comando = Command()
  4.  
  5.        If comando = "prueba1" Then msgbox("Se recibió palabra PRUEBA1")
  6.        If comando = "prueba2" Then msgbox("Se recibió palabra PRUEBA2")
  7.    End Sub

Y haciendo desde consola:

Citar
aplicacion.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.


Título: Re: Re: Recibir comandos en el formulario por línea de comando
Publicado por: raul338 en 29 Julio 2013, 07:39 am
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


Título: Re: Recibir comandos en el formulario por línea de comando
Publicado por: Eleкtro en 29 Julio 2013, 19:56 pm
Los argumentos los puedes encontrar almacenados aquí: My.Application.CommandLineArgs

Ejemplo:
Código
  1.    ' Loop through all the command line arguments given.
  2.    For I As Integer = 0 To My.Application.CommandLineArgs.Count - 1
  3.        ' If an argument equals "/m"
  4.        If My.Application.CommandLineArgs.Item(I).ToLower = "/m" Then
  5.            MsgBox("You have used /m")
  6.        Else ' If it doesn't equal "/m"
  7.            MsgBox("Incorrect CMD Argument.")
  8.        End If
  9.    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
  1.    Declare Function AttachConsole Lib "kernel32.dll" (ByVal dwProcessId As Int32) As Boolean
  2.    Declare Function FreeConsole Lib "kernel32.dll" () As Boolean
  3.  
  4.    AttachConsole(-1) ' Attach the console
  5.    System.Console.Writeline("I am writing from a WinForm to the console!")
  6.    FreeConsole() ' Desattach the console

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

Código
  1. #Region " App Is Launched From CMD? "
  2.  
  3.    ' [ App Is Launched From CMD? Function ]
  4.    '
  5.    ' // By Elektro H@cker
  6.    '
  7.    ' Examples:
  8.    ' MsgBox(App_Is_Launched_From_CMD)
  9.    ' If App_Is_Launched_From_CMD() Then Console.WriteLine("Help for this application: ...")
  10.  
  11.    Declare Function AttachConsole Lib "kernel32.dll" (ByVal dwProcessId As Int32) As Boolean
  12.    Declare Function FreeConsole Lib "kernel32.dll" () As Boolean
  13.  
  14.    Private Function App_Is_Launched_From_CMD() As Boolean
  15.        If AttachConsole(-1) Then
  16.            FreeConsole()
  17.            Return True
  18.        Else
  19.            Return False
  20.        End If
  21.    End Function
  22.  
  23. #End Region

Saludos...