Bueno, si es para usarlo dentro de un juego, sin necesidad de obtener el handle de ningun objeto dentro de la aplicación, entonces la cosa es mas facil...
, sólo tienes que obtener el handle de la ventana a la que quieres enviar la pulsacion de la tecla.
Me explico, si quieres emular la pulsacion de la tecla "1" en tu juego, sin que se vaya a escribir por ejemplo en un cuadro de texto o en ningun otro objeto dentro del juego, puedes usar la función "PostMessage" de user32.
Ejemplo: PostMessage(Manejador, WM_KEYDOWN, VK_TAB, 0); Este ejemplo lo que haría sería simular la pulsacion de la tecla "Tab", en una aplicación.
Sin embargo si lo que quieres es que al pulsar 1, se escriba "1" en cierta parte del juego, la cosa no sería tan fácil, ya que tendrias que obtener el Handle del objeto en el que quieres escribir (nunca me lo he planteado, pero supongo que es así... si no que alguien me corrija
)
En cuanto al primer caso, en el que no hace falta escribir "1" en ninguna parte, sino simplemente simular su pulsacion en el juego, paso a describirtelo mas detalladamente:
Vamos a hacer dos pasos: primero obtener el Manejador de la ventana a la que quieres enviar la pulsacion, (en este caso el manejador del juego):
1) Declaras una variable del tipo THandle; //THandle = LongWord; llamemosla x
;
2) En "x", de tipo THandle o LongWord, como quieras llamarle, guardas el resultado de la siguiente llamada a la funcion de user32:
x=FindWindow(nulo, 'Titulo_de_la_ventana_del_juego');
El titulo de la ventana debe ser completo, tal y como lo ves con todas las letras, guiones, mayusculas y minusculas, etc... (pero que sea exactamente igual).
Si no lo sabes, o no eres capaz de obtenerlo, puedes usar otra funcion de user32, llamada GetWindowText...
3) Si "x" es distino de 0, significa que todo va bien, y si x=0, entonces es que no se ha encontrado la ventana (Comprueba que el nombre que has escrito es correcto)
4) Si "x" es distinto de 0, entonces mandamos el mensaje de pulsar "1":
PostMessage (x, WM_KEYDOWN, 49, 0);
Por si acaso te dejo escrito un ejemplo en delphi:
var
x: THandle;
begin
x:=FindWindow(nil, 'Titulo_ventana_del_juego'); //nil = "vbNullString" en Visual Basic
if (x<>0) then begin
PostMessage(x, WM_KEYDOWN, 49, 0); //49 => 1 en ascii, $31 en Hexadecimal
end else ShowMessage('Ventana no encontrada');
end;
Creo que esto puede servir. Intentalo y ya nos contarás que tal. De todas maneras, no está de mas que busques informacion acerca de estas funciones y de la API de Windows, en el lenguaje que vayas a usar para hacerte el programita...
.
P.D.: da un poco de mas informacion acerca del juego, del objetivo de pulsar "1" en él, etc... asi podremos ayudarte mejor.
Un saludo y suerte
Marcadores