Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Sergio en 10 de Febrero de 2003, 06:17:08 PM

Título: Error ByRef en VB
Publicado por: Sergio en 10 de Febrero de 2003, 06:17:08 PM
                                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!!!                                
Título: Error ByRef en VB
Publicado por: Juan Mellado en 10 de Febrero de 2003, 09:40:05 PM
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
Título: Error ByRef en VB
Publicado por: Sergio en 11 de Febrero de 2003, 06:09:54 PM
                                Aaaaaah, ok. Entendido. Muchisimas gracias, Juan.

Saludos!!!