Programar eventos de teclado en C.

Urien

Algo que no me enseñaron el año pasado en programación es a hacer un evento de teclado que funcione en windows, por ejemplo:

Programa que pulse automaticamente control + alt + flecha abajo al ejecutarse.
Basicamente lo que quiero conseguir es un programa que ejecute conjuntos de teclas con funciones de windows, como por ejemplo tambien un programa ke pulse control + alt + supr y me lance la pantalla del administrador de tareas.

Bueno esto lo que haria seria poner la pantalla bocaabajo (ya se ke ahora lo estareis probando xD) pero no se como hacer que se pulsen esas ciertas teclas y produzcan un evento en windows. ¿Realmente se puede hacer en C? ¿necesito alguna biblioteca de windows o algo asi?.

Soltrac

Q compilador usas?

En Borland C++ creo q existían eventos de keypress.

Urien

Dev C++

Soltrac

#3 Pues no sabría decirte, ya q no he utilizado el dev-cpp.

A

Para producir pulsaciones de teclas de forma automática
en Windows, tendrás que usar la API de Windows, en concreto
te será de ayuda el método: SendKeys.Send

Un buen artículo sobre ello puedes encontrarlo aquí:
http://www.codeproject.com/cpp/sendkeys_cpp_Article.asp

LOc0

Hay varias formas (como casi siempre). La más fácil creo que es -> http://www.codeproject.com/system/keyboard.asp

y un ejemplo sencillo para Dev-Cpp:
http://foros.solocodigo.com/index.php?showtopic=23894&view=findpost&p=84208

Salu2 ;)

cabron

Como te ha dicho Archvile, la única solución en C es usar el API de Windows directamente, y salvo que lo necesites por cojones, o que sea una asignatura que tienes que aprobar, o simplemente por que lo quieres aprender, te aconsejo que lo evites.

Usar el API de Windows directamente con C, es tedioso, y hay que hacer mucho trabajo incluso para la más insignifcante tarea,

Urien

#6 joder me has ahorrado todo el trabajo xD, tengo un problema con ese ejemplo... y es ke yo no entiendo nada de los codigos 0xlokesea, no se ke numero codifica cada tecla, donde puedo verlo?

Edit: Vale, no me pegueis, es el codigo ASCII verdad? ¬¬U

Edit2: No, no lo entiendo finalmente, esta en hexadecimal? como busco yo ahi cosas como el control, el shift o el alt? estoy completamente perdido

LOc0

Efectivamente el 0x antes del número significa que está en hexadecimal. Aquí tienes la tabla de VIRTUAL KEYS -> http://msdn2.microsoft.com/en-us/library/ms645540.aspx

La de scan codes la tienes en la web que te puse antes junto a ejemplos de pulsaciones múltiples.

Ejemplo de CTRL + ALT + SUPR


keybd_event(VK_CONTROL,0x9d,0 , 0); // Pulsar CTRL
keybd_event(VK_MENU,0xb8,0 , 0); //Pulsar ALT
keybd_event(VK_DELETE,0xd3,0 , 0); // Pulsar SUPR

keybd_event(VK_DELETE,0xd3, KEYEVENTF_KEYUP,0); //Soltar SUPR
keybd_event(VK_MENU,0xb8,KEYEVENTF_KEYUP,0); //Soltar ALT
keybd_event(VK_CONTROL,0x9d,KEYEVENTF_KEYUP,0); //Soltar CTRL

Salu2 ;)

De nada.
||
||
\/

Urien

mpfff gracias tipo, no se ke habria echo sin ti, aunke me jode no haberlo podido sacar yo pero desconocia por completo el tema.

Usuarios habituales

  • Urien
  • LOc0
  • cabron
  • Archville
  • Soltrac