Hola
Necesito hacer que mi programa haga pensar a los demas que se esta pulsando F5, pero a TODOS, no solo a la ventana activa (razon por la que no me vale SendKeys). Entonces, buscando por la red, he encontrado un "truco" que es este:
Activar/Desactivar el Bloqueo de Mayusculas
Solamente necesitamos declarar en un Modulo lo siguiente:
Public Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long
Public Declare Function SetKeyboardState Lib "user32" Alias "SetKeyboardState" (lppbKeyState As Byte) As Long
Public Type KeyboardBytes
kbByte(0 To 255) as Byte
End Type
En el Evento Click de la ventana (Form) colocaremos el siguiente codigo y nos fijaremos en la actitud de
la lucecita del Bloqueo de Mayusculas...
Private Sub Form_Click()
Dim kbArray as KeyboardBytes
GetKeyboardState kbArray
kbArray.kbByte(&H14) = IIF(kbArray.kbByte(&H14) = 1, 0, 1)
SetKeyboardState kbArray
End Sub
tendria que cambiar las referencias para que pulse Control+F5 en vez de Bloq Mayus, pero de eso ya me encargare yo. El caso es que cuando hago lo que dice y ejecuto, al hacer click sobre el formulario me dice:
"El tipo de argumento ByRef no coincide." y me señala la primera llamada a GetKeyBoardState.
Que le pasa?
Gracias de antemano y un saludo!!!
Según la ayuda de Get/SetKeyboardState del SDK, el parámetro de estas funciones debe ser un puntero a un array de 256 bytes. De la forma que las has declarado estás indicando que es de tipo byte.
Cambia tu código por algo así como:
Public Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
Public Declare Function GetKeyboardState Lib "user32" (ByRef pbKeyState As KeyboardBytes) As Long
Public Declare Function SetKeyboardState Lib "user32" (ByRef lppbKeyState As KeyboardBytes) As Long
El ByRef hace que VB trate el parámetro como un puntero.
Espero te sirva de ayuda.
Saludos
Aaaaaah, ok. Entendido. Muchisimas gracias, Juan.
Saludos!!!