Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: magarcan en 22 Octubre 2011, 18:04 pm



Título: Problema con SendKeys C#
Publicado por: magarcan en 22 Octubre 2011, 18:04 pm
Hola!! Me he descargado una aplicación de ejemplo de un cliente que utiliza socket. Lo único que le he añadido ha sido ésto:
Código:
                    switch (sRecieved)
                    {
                        case "\na":
                            SendKeys.Send("algo");
                            break;
                        case "\nb":
                            SendKeys.Send("b");
                            break;
                    }
sRecieved es un string dónde se almacenan los datos que recive el socket. El caso es que la aplicación se cierra sin dar error ni nada.

¿Alguna idea? Os dejo aquí el código que estoy utilizando. http://www.mediafire.com/?l62u2w859gx55dg

Gracias!!


Título: Re: Problema con SendKeys C#
Publicado por: Keyen Night en 22 Octubre 2011, 19:06 pm
Y cuál es el problema ._.?


Título: Re: Problema con SendKeys C#
Publicado por: magarcan en 22 Octubre 2011, 19:09 pm
El cliente se conecta al server sin problemas. Envío y recibo bien, pero cuando recibo uno de los caracteres definidos dentro del switch, en lugar de ejecutar el SendKeys, la aplicación se cierra sin enviar las teclas, cuando debería enviar las teclas y seguir abierta esperando nuevos envíos.


Título: Re: Problema con SendKeys C#
Publicado por: $Edu$ en 22 Octubre 2011, 20:49 pm
Ve depurando a ver si entra a algun case de esos..


Título: Re: Problema con SendKeys C#
Publicado por: magarcan en 22 Octubre 2011, 20:54 pm
Sí, he comprobado que llega a entrar a los cases, pero cuando va a ejecutar la instrucción del SendKeys, no los manda y se cierra el programa. No da ni excepción ni leches, algo raro raro...


Título: Re: Problema con SendKeys C#
Publicado por: Keyen Night en 22 Octubre 2011, 22:25 pm
Para enviar teclas y texto a ventanas a travéz de su handle yo uso la API SendMessage, funciona mejor que SendKeys mira estos ejemplos:

Código
  1.  
  2.            public enum WindowMessage : int
  3.            {
  4.                WM_KEYDOWN = 0x0100,
  5.                WM_KEYUP = 0x0101,
  6.                WM_CHAR = 0x0102,
  7.                WM_LBUTTONDOWN = 0x201,
  8.                WM_LBUTTONUP = 0x202
  9.            }
  10.  
  11.        public static void SendKey(IntPtr WindowhWnd, Int32 key)
  12.        {
  13.            WinApi.SendMessage(WindowhWnd, WindowMessage.WM_KEYDOWN, (int)key, 0);
  14.            WinApi.SendMessage(WindowhWnd, WindowMessage.WM_CHAR, (int)key, 0);
  15.            WinApi.SendMessage(WindowhWnd, WindowMessage.WM_KEYUP, (int)key, 0);
  16.        }
  17.  
  18.        public static void SendString(IntPtr WindowhWnd, string String)
  19.        {
  20.            foreach (var x in String)
  21.                SendKey(WindowhWnd, Convert.ToInt32(x));
  22.            Thread.Sleep(3);
  23.        }


Título: Re: Problema con SendKeys C#
Publicado por: magarcan en 22 Octubre 2011, 22:36 pm
Las "teclas" quiere que se envíen a un proceso concreto, ¿cómo podría obtener el handle?


Título: Re: Problema con SendKeys C#
Publicado por: Keyen Night en 23 Octubre 2011, 01:17 am
SendMessage no envia este tipo de mensajes a los procesos sino a las ventanas por lo tanto es el Handle (hWnd) de la ventana lo que necesitas obtener.


Título: Re: Problema con SendKeys C#
Publicado por: Unbr0ken en 27 Octubre 2011, 21:04 pm
Las "teclas" quiere que se envíen a un proceso concreto, ¿cómo podría obtener el handle?

Nativo: API (http://pinvoke.net/) -> FindWindow (http://pinvoke.net/default.aspx/user32/FindWindow.html).

Gestionado: IntPtr pHandle = Process.GetProcessesByName("ElProceso")[0].MainWindowHandle;

...