Página 1 de 1

"Bindear" teclas

Publicado: 29 Jun 2011, 11:41
por chronos
Hola a tod@s!!

Os traigo una pregunta a la que me he pasado 2 semanas buscando por el foro y la guía y no he encontrado nada xD.
A lo que me refiero con lo de "bindear" es coger una combinación de teclas y que haga algo en concreto. Por ejemplo, que le de a "ALT" + "2" y salga directamente "@hotmail.com". Vosotros sois los expertos , de momento con eso me conformo para ir probando por ahí xD.

Re: "Bindear" teclas

Publicado: 29 Jun 2011, 16:49
por ms999
Uso la idea que tiraste y le agrego una HotKey para cerrar el script

Código: Seleccionar todo

HotKeyset("{esc}","_exit")
HotKeyset("!2","_hotmail")

while True
    sleep(2000)
WEnd

func _exit()
    Exit
EndFunc
Func _hotmail()
    shellExecute("www.hotmail.com")
EndFunc
Fijate en la ayuda como se ponen las teclas especiales como Alt = ! control = ^ o shift = + , y tambien las teclas F1, F2, F3, etc. la tecla ESC o ENTER con "{}".
Esta manera es la mas practica ya que la funcion HotKeySet() detiene el script para ejecutar la funcion que se asigno a la funcion, podes poner un sleep de 100000000000000 igualmente la hotkey va a funcionar.

Otra manera de hacerlo que me parece que es mas especifica porque puede funcionar sobre cualquier programa(aveces en los juegos la funcion HotKeySet() no funciona) es usando en un bucle la funcion _IsPressed() que sirve para checkear si tal tecla del teclado esta siendo presionada o no, este usa el valor Hex de la tecla, en la ayuda de AutoIt sobre esta funcion tenes una lista con el valor de muchas de las teclas y en MSDN tenes la lista completa. te dejo el mismo ejemplo usando _IsPressed().
Fijate que esta funcion la tenes que agregar incluyendo Misc.Au3
Tambien fijate que esta funcion te pone como parametro opcional la dll que usa, esta te conviene llamarla si esta funcion va a ser usada muchas veces, ya que sino la misma funcion lo hara cada vez que se ejecute y quiza consuma tiempo de script.

Código: Seleccionar todo

#include <Misc.au3>
$vDLL = DllOpen("user32.dll")

While True
	If _IsPressed("1B", $vDLL) Then _exit(); tecla ESC
	If _IsPressed("12", $vDLL) And _IsPressed("32", $vDLL) Then _hotmail(); tecla ALT y 2
	Sleep(50)
WEnd

Func _exit()
	DllClose($vDLL) ; acordate de cerrar la DLL
	Exit
EndFunc   ;==>_exit
Func _hotmail()
	ShellExecute("www.hotmail.com")
EndFunc   ;==>_hotmail