Enviar mensaje a la consola

Iniciado por CH4ØZ, 5 Agosto 2010, 20:54 PM

0 Miembros y 3 Visitantes están viendo este tema.

CH4ØZ

bueno tengo un problema usando FindWindow, ya que al parecer estoy cometiendo algun error que se me pasa por alto.

despues de leer un poco y escribir varias veces el codigo no logro enviar un mensaje a la consola (DOS windows), desde mi programa.

alguien me puede dar una mano por favor?
no me juzguen si no me conocen

[D4N93R]

Puedes replantear tu pregunta por favor? No entiendo qué tiene que ver FindWindow con la consola? O también postea esa parte del código a ver si vemos el error.

Un saludo!

CH4ØZ

estuve leyendo sobre como enviar un texto a una aplicacion externa a la mia, y encontre que se hace con FindWindow, FindWindowEx y SendMessage o PostMessage.

Tube la idea de enviar un mensaje a la consola de comandos de windows para ver si podia, pero al intentarlo no logre nada.

aca algunos de los codigos con los que intente (ya que no recuerdo todos):

Código (vbnet) [Seleccionar]

        Dim hWnd As Long, tmp As Long
        'forma 1:
        For Each P As Process In Process.GetProcesses
            If P.ProcessName = "Símbolo del sistema" Then
                hWnd = P.MainWindowHandle
            End If
        Next
        SendMessage(hWnd, WM_SETTEXT, 0, "texto")
        'forma 2:
        For Each P As Process In Process.GetProcesses
            If P.ProcessName = "Símbolo del sistema" Then
                tmp = P.MainWindowHandle
            End If
        Next
        hWnd = GetWindow(tmp, 5)
        SendMessage(hWnd, WM_SETTEXT, 0, "texto")
        'forma 3:
        hWnd = FindWindow(vbNullString, "Símbolo del sistema")
        SendMessage(hWnd, WM_SETTEXT, 0, "texto")
        'forma 4:
        tmp = FindWindow(vbNullString, "Símbolo del sistema")
        hWnd = GetWindow(tmp, 5)
        SendMessage(hWnd, WM_SETTEXT, 0, "texto")
no me juzguen si no me conocen

CH4ØZ

nadie sabe como puedo hacer esto?
no me juzguen si no me conocen

[D4N93R]

Hay una forma más fácil, no se si te funcione, es algo así:
Código (csharp) [Seleccionar]

[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lp1, string lp2);

[DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetForegroundWindow(IntPtr hWnd);

private void Test()
{
     //Una prueba con el notepad
     IntPtr handle = FindWindow("Notepad", "Untitled - Notepad");
     if (!handle.Equals(IntPtr.Zero))
     {
          if (SetForegroundWindow(handle))
          {
                SendKeys.Send("Hello World!");
                SendKeys.Send("{ENTER}");
           }           
     }
}


Lo que hace es activar a esa ventana, y enviar texto como si fuese del teclado. Si no, la forma en que tu lo planteas es algo así:
Código (csharp) [Seleccionar]

private const int WM_SETTEXT = 0x000C;
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("User32.dll")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindows);
[DllImport("User32.dll")]
private static extern Int32 SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, StringBuilder lParam);

private void Test()
{
    IntPtr hWnd = FindWindow("Notepad", "Untitled - Notepad");
    if (!hWnd.Equals(IntPtr.Zero))
    {
        IntPtr edithWnd = FindWindowEx(hWnd, IntPtr.Zero, "Edit", null);
        if (!edithWnd.Equals(IntPtr.Zero))
            SendMessage(edithWnd, WM_SETTEXT, IntPtr.Zero, new StringBuilder("Hello World!"));
    }
}


CH4ØZ

mira perdon que no sea tan bueno, pero no logro que el codigo funcione. lo pase a vb.net asi y no anda:

Código (vbnet) [Seleccionar]

Public Sub test()
    Dim hWnd As Long
    hWnd = FindWindow("Notepad", "Untitled - Notepad")
    If hWnd.Equals(IntPtr.Zero) <> 0 Then
        Dim edithWnd As Long = FindWindowEx(hWnd, IntPtr.Zero, "Edit", vbNull)
        If edithWnd.Equals(IntPtr.Zero) <> 0 Then SendMessage(edithWnd, WM_SETTEXT, IntPtr.Zero, "Hello World!")
    End If
End Sub
no me juzguen si no me conocen

[D4N93R]

Te da algún mensaje de error o algo?

CH4ØZ

puse un try aver si podia tener mas info, pero no.
simplemente no envia el mensaje, compila perfecto :S
no me juzguen si no me conocen

[D4N93R]

Con cualquier aplicación funciona bien, pero con la consola no, al parecer Windows no deja hacer eso.  Tiene los mensajes Protegidos, aún no le he encontrado solución :(

CH4ØZ

de ultima si no agregame al msn asi podriamos hablar mejor. mi idea era enviar un texto X a la consola, no importaba la forma, pero no logro hayar la solucion.

mi msn es the_chaoz92@hotmail.com
no me juzguen si no me conocen