Sí, se puede hacer por ejemplo con la función
_IsPressed, en misc.au3. A esta función le pasas un código de tecla y te dice si está pulsada (por cierto, que también hay códigos para los botones del ratón, así que con la misma función también puedes mirar eso).
Los códigos los ves en la ayuda de la función _IsPressed.
Tu código podría traducirse a esto (yo pongo unos
ConsoleWrite para que me vaya mostrando lo que va haciendo, tú tendrías tus funciones
subo(), bajo(), etc.:
Código: Seleccionar todo
#include <Misc.au3>
Global $UserDLL = DllOpen("user32.dll")
While 1
If _IsPressed("25", $UserDLL) Then ; Cursor izquierda
ConsoleWrite("IZQUIERDA" & @LF)
ElseIf _IsPressed("27", $UserDLL) Then ; Cursor derecha
ConsoleWrite("DERECHA" & @LF)
EndIf
If _IsPressed("26", $UserDLL) Then ; Cursor arriba
ConsoleWrite("ARRIBA" & @LF)
ElseIf _IsPressed("28", $UserDLL) Then ; Cursor abajo
ConsoleWrite("ABAJO" & @LF)
EndIf
If _IsPressed("1B", $UserDLL) Then ; Escape
ConsoleWrite("ESCAPE, saliendo..." & @LF)
ExitLoop
EndIf
Sleep(50)
WEnd
DllClose($UserDLL)
Exit
Tal como lo he puesto también coge diagonales, si pulsas cursor arriba y derecha verás en la consola que va alternando los dos mensajes. No le dejo pulsar por ejemplo izda y derecha a la vez, pero vaya, eso es cosa de diseño. tú ponlo con la funcionalidad que te interese.
Como hago un
DllOpen para que sea más eficiente el acceso a la librería, hay que acordarse de hacer un
DllClose al salir.
El Sleep(50) es para que no se hunda la CPU esperando el teclado.