SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: ichigo15 en Viernes 8 de Abril de 2011, 14:23

Título: Como simular leer de teclado para hacer un bot
Publicado por: ichigo15 en Viernes 8 de Abril de 2011, 14:23
Hola. Mi idea es el simular que el usuario "teclea" una letra, lo que quiero conseguir por ejemplo es:

Abro el block de notas, ejecuto el programa, vuelvo el foco al notepad, y sin que yo toque nada, escriba una 'a'.
Me gustaría hacerlo sin tener que recurrir al lenguaje ensamblador.

Hay alguna biblioteca que te proporcione .NET que pueda hacer eso?

Si no, de que forma lo podria conseguir?
Título: Re: Como simular leer de teclado para hacer un bot
Publicado por: ProfesorX en Viernes 8 de Abril de 2011, 16:53
Que yo sepa no hay ninguna bliblioteca de .NET que haga eso.

Lo que mencionas ya es programacion mas avanzada, creo que podria hacerse mediante llamadas directas a funciones del sistema operativo, aunque nunca he hecho nada parecido, creo que tendras que investigar tu mismo en MSDN.

Saludos :)
Título: Re: Como simular leer de teclado para hacer un bot
Publicado por: Altrox en Sábado 9 de Abril de 2011, 00:47
Buenas, como bien dijo ProfesorX, llamar directamente a funciones del sistema operativo.

Puedes utilizar el método GetForegroundWindow() que obtiene el puntero handle de la ventana activa.
Código: C#
  1.  
  2. [System.Runtime.InteropServices.DllImport("user32.dll")]
  3. private static extern IntPtr GetForegroundWindow();
  4.  
  5.  

También está GetWindowText() que obtiene el título de la ventana del handle que le indiques...
Código: C#
  1.  
  2. [System.Runtime.InteropServices.DllImport("user32.dll")]
  3. public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
  4.  
  5.  

para utilizar GetWindowText() puedes hacer lo siguiente:
Código: C#
  1.  
  2. IntPtr hWnd = GetForegroundWindow();
  3. StringBuilder txt  = new StringBuilder(64); //64 por ejemplo, como si es 128. Longitud. Para almacenar el texto
  4. GetWindowText(hWnd, txt, txt.Capacity);
  5. string titulo = txt.ToString();
  6.  
  7.  

Con esto puedes comprobar si el título contiene por ejemplo "Bloc de notas" y si es así hacer "algo".
También tienes SendKeys.Send() para enviar texto.

Saludos.
Título: Re: Como simular leer de teclado para hacer un bot
Publicado por: Rogerz en Jueves 2 de Junio de 2011, 23:30
y cual seria la utilidad para eso?