Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Error ByRef en VB

Iniciado por Sergio, 10 de Febrero de 2003, 06:17:08 PM

« anterior - próximo »

Sergio

                                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!!!                                
here are only 10 types of people: those who understand binary and those who don't

Juan Mellado

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

Sergio

                                Aaaaaah, ok. Entendido. Muchisimas gracias, Juan.

Saludos!!!                                
here are only 10 types of people: those who understand binary and those who don't






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.