Página 1 de 2

Re: detectar el estado de bloqueo de mayúsculas

Publicado: 14 Sep 2009, 13:36
por Jonny
Hola

Sigo intentando arreglar el problemilla que daba la función GetKeyState (O a saber que), que hacía que la convinación de teclas Alt+Tab no fuera detectada si la gui del programa que las detectaba estaba activa...

Con ayuda de Ximorro y Chefito, juntando dos códigos suyos que hacen lo mismo (Detectar teclas pulsadas) parece que puede conseguirse, pero aún no lo he logrado del todo.

He hecho esto:

Código: Seleccionar todo


#include <Misc.au3>



#include <GUIConstantsEx.au3>







Global $UserDLL = DllOpen("user32.dll"), $codigo, $i, $txt



Opt("GUIOnEventMode", 1)



Opt('GUICloseOnESC', 0)



GUICreate("Teclitas", 240, 100)



$lblTit = GUICtrlCreateLabel("Teclas presionadas (código hexadecimal):", 15, 20, 200, 52)



$lblCodigos = GUICtrlCreateLabel("", 20, 40, 160, 52)



GUISetOnEvent($GUI_EVENT_CLOSE, "_Salir")



GUISetState()







While 1

    $txt = ""



    for $i = 0 to 255



        $codigo = StringRight(Hex($i),2) ;Pasamos a string hexadecial



        If _IsPressed($codigo, $UserDLL) Then



            $txt &= $codigo & " "



        EndIf



    Next



;GUICtrlSetData($lblCodigos, $txt)

$txt=StringTrimRight($txt, 1)

If ($txt==12 And PulsadaKey(0x09)) Then

msgbox(0, "", $txt)

EndIf



WEnd

Func PulsadaKey($codigoKey=0x9)



    $ret = DllCall("user32.dll", "long", "GetKeyState", "long", $codigoKey)



    If $ret[0]=0 Or $ret[0]=1 Then



        $pulsada=False



    Else



        $pulsada=True



    EndIf



    Return $pulsada



EndFunc

Func _Salir()



    DllClose($UserDLL)



    Exit



EndFunc

 
Teóricamente debería detectarse la convinación de teclas, de echo en algunas ocasiones (cuando le apetece) funciona. pero solo eso, cuando le apetece
¿Se os ocurre como pulirlo para que funcione como debe?
(Igual que está hecho por Chefito más arriba, que detecta perfectamente la pulsación de ambas teclas)....
Aclaro, que con la función _IsPressed no he conseguido que funcione bien tampoco, obtengo un resultado similar al que devuelve éste código.
gracias,

Salu2!

Re: detectar el estado de bloqueo de mayúsculas

Publicado: 14 Sep 2009, 14:12
por Ximorro
Si lo entiendo lo que quieres hacer es algún proceso cuando detectes una combinación ALT+TAB ¿no es así?

Pues chico, con mi programita detecto perfectamente la combinación ALT+TAB, no sé por qué dices que no funciona.

Pero si buscas algo concreto puedes ir al grano y en vez de mirar todo el teclado espera esas teclas concretas, lo que puedes hacer es lo siguiente:
Meterte en un bucle que espera que ALT (12) y TAB (09) estén pulsados a la vez, tipo
While NOT (_IsPressed("12", $UserDLL) AND _IsPressed("09", $UserDLL))
Sleep(50)
Wend

Es decir, "mientras no están pulsadas LAS DOS A LA VEZ se espera".

Y luego te esperas a que suelte las dos teclas:
While (_IsPressed("12", $UserDLL) OR _IsPressed("09", $UserDLL))
Sleep(50)
Wend

Es decir, "mientras hay ALGUNA de las dos presionadas, se espera". (por ejemplo puede mantener ALT mientras suelta y pulsa TAB varias veces)

Y después de ese bucle pones tu proceso, ahí ya habrá usado ALT+TAB, y lo habrá soltado.
(Que conste que lo escribo aquí sin probarlo, espero no haber metido la pata con los AND, OR, NOT, etc...) Inténtalo y si no te sale nos pones el código y miramos a ver si la he liado ;-)

A todo esto, esto no impide que Windows u otros programas que miran esas teclas TAMBIEN hagan su proceso. El hecho de mirar las teclas pulsadas y hacer algo en consecuencia no impide que otros programas también lo hagan. Es decir, vas a poder saber cuándo el usuario usa ALT+TAB, pero Windows igual va a cambiar de ventana.

Re: detectar el estado de bloqueo de mayúsculas

Publicado: 14 Sep 2009, 17:03
por Jonny
Hola

Sí, eso mismo quería.
Como digo en el otro post dónde hablamos de casi lo mismo, ya lo solucioné.
Cierto, era tan sencillo como comprobbar que ambas teclas estubieran pulsadas...
La cuestión es que antes no funcionó y ahora por fin sí.

Bueno, compruebo todo el teclado, porque Alt+tab es una de las cosas que quiero detectar (La que más problemas me ha dado) pero en realidad, quiero comprobar más teclas o convinaciones de teclas.

Gracias,

Salu2!