Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Estas en el tema de Estaba haciendo esta api y no me lo hace si podes ayudar mejor en el foro de Visual Basic clásico en Foros del Web. Hola amigos estaba practicando para hacer un juego entonces se necesita la api GetAsyncKeyState que permite tocar una tecla y q aga una accion solo ...
  #1 (permalink)  
Antiguo 18/02/2010, 11:50
Avatar de mati987  
Fecha de Ingreso: febrero-2010
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Información Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Hola amigos estaba practicando para hacer un juego entonces se necesita la api GetAsyncKeyState que permite tocar una tecla y q aga una accion solo practicaba no es el juego ahora les doy el codigo y me dicen q esta mal lo q queria es q aprete control y q me aparesca un mensajebox

LA DECLARACION:
---------------------------
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer


EL CODIGO:
------------------------
On Error Resume Next
'Para comprobar la clave wheteher de control se presiona
If GetAsyncKeyState(17) Then
msgbox "Control key pressed"
End If
  #2 (permalink)  
Antiguo 18/02/2010, 12:07
Avatar de mati987  
Fecha de Ingreso: febrero-2010
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

espero que me puedan ayudar con esto ya que estoy muy interesado en saberlo
  #3 (permalink)  
Antiguo 18/02/2010, 12:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Prueba este ejemplo solo funciona cuando tienes el foco dentro del formulario.
Solo adaptalo para la tecla con la que quieras llamar a una funcion en este caso es una combinacion pero tambien sirve para 1 sola tecla.

Código:
Option Explicit
'***************************************************************************
'*  Nota: Colocar la propiedad KeyPreview del formulario en True
'***************************************************************************

'Variable booleanas para determinar si está presionadas las teclas
Dim Ctrl As Boolean, Alt As Boolean, A As Boolean

'Constantes de las teclas Alt, Ctrl y a
Private Const vbKeyA = 65
Private Const vbKeyalt = 17
Private Const vbKeyControl = 18


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

        'Verifica las teclas Alt - Ctrl y la A
        If KeyCode = vbKeyalt Then Ctrl = True
        If KeyCode = vbKeyControl Then Alt = True
        If KeyCode = vbKeyA Then A = True

        'Si las 3 variables están en True .. mostramos un mensaje
        If Ctrl And Alt And A Then
            MsgBox "Hola"
            Form_KeyUp 0, 0
        End If

End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    
    'Cuando se produce KeyUp ponemos las variables en false
    Ctrl = False
    Alt = False
    A = False

End Sub

Private Sub Form_Load()

    'Establecemos la propiedad KeyPreview para que el formulario _
    'intercepte cualquier intento de presión de tecla

    Me.KeyPreview = True

    Me.Caption = " Ejemplo de  combinación de teclas "

    MsgBox " Presiona las teclas Ctrl+Alt+a", vbInformation

End Sub
  #4 (permalink)  
Antiguo 18/02/2010, 12:19
Avatar de mati987  
Fecha de Ingreso: febrero-2010
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Cita:
Iniciado por zxs23 Ver Mensaje
Prueba este ejemplo solo funciona cuando tienes el foco dentro del formulario.
Solo adaptalo para la tecla con la que quieras llamar a una funcion en este caso es una combinacion pero tambien sirve para 1 sola tecla.

Código:
Option Explicit
'***************************************************************************
'*  Nota: Colocar la propiedad KeyPreview del formulario en True
'***************************************************************************

'Variable booleanas para determinar si está presionadas las teclas
Dim Ctrl As Boolean, Alt As Boolean, A As Boolean

'Constantes de las teclas Alt, Ctrl y a
Private Const vbKeyA = 65
Private Const vbKeyalt = 17
Private Const vbKeyControl = 18


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

        'Verifica las teclas Alt - Ctrl y la A
        If KeyCode = vbKeyalt Then Ctrl = True
        If KeyCode = vbKeyControl Then Alt = True
        If KeyCode = vbKeyA Then A = True

        'Si las 3 variables están en True .. mostramos un mensaje
        If Ctrl And Alt And A Then
            MsgBox "Hola"
            Form_KeyUp 0, 0
        End If

End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    
    'Cuando se produce KeyUp ponemos las variables en false
    Ctrl = False
    Alt = False
    A = False

End Sub

Private Sub Form_Load()

    'Establecemos la propiedad KeyPreview para que el formulario _
    'intercepte cualquier intento de presión de tecla

    Me.KeyPreview = True

    Me.Caption = " Ejemplo de  combinación de teclas "

    MsgBox " Presiona las teclas Ctrl+Alt+a", vbInformation

End Sub


gracias por ayudar ahora lo pruebo
  #5 (permalink)  
Antiguo 18/02/2010, 12:23
Avatar de mati987  
Fecha de Ingreso: febrero-2010
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Cita:
Iniciado por zxs23 Ver Mensaje
Prueba este ejemplo solo funciona cuando tienes el foco dentro del formulario.
Solo adaptalo para la tecla con la que quieras llamar a una funcion en este caso es una combinacion pero tambien sirve para 1 sola tecla.

Código:
Option Explicit
'***************************************************************************
'*  Nota: Colocar la propiedad KeyPreview del formulario en True
'***************************************************************************

'Variable booleanas para determinar si está presionadas las teclas
Dim Ctrl As Boolean, Alt As Boolean, A As Boolean

'Constantes de las teclas Alt, Ctrl y a
Private Const vbKeyA = 65
Private Const vbKeyalt = 17
Private Const vbKeyControl = 18


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

        'Verifica las teclas Alt - Ctrl y la A
        If KeyCode = vbKeyalt Then Ctrl = True
        If KeyCode = vbKeyControl Then Alt = True
        If KeyCode = vbKeyA Then A = True

        'Si las 3 variables están en True .. mostramos un mensaje
        If Ctrl And Alt And A Then
            MsgBox "Hola"
            Form_KeyUp 0, 0
        End If

End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    
    'Cuando se produce KeyUp ponemos las variables en false
    Ctrl = False
    Alt = False
    A = False

End Sub

Private Sub Form_Load()

    'Establecemos la propiedad KeyPreview para que el formulario _
    'intercepte cualquier intento de presión de tecla

    Me.KeyPreview = True

    Me.Caption = " Ejemplo de  combinación de teclas "

    MsgBox " Presiona las teclas Ctrl+Alt+a", vbInformation

End Sub


uy gracias funciono de primera no sabes como te lo agradesco
  #6 (permalink)  
Antiguo 18/02/2010, 13:23
Avatar de mati987  
Fecha de Ingreso: febrero-2010
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Cita:
Iniciado por zxs23 Ver Mensaje
Prueba este ejemplo solo funciona cuando tienes el foco dentro del formulario.
Solo adaptalo para la tecla con la que quieras llamar a una funcion en este caso es una combinacion pero tambien sirve para 1 sola tecla.

Código:
Option Explicit
'***************************************************************************
'*  Nota: Colocar la propiedad KeyPreview del formulario en True
'***************************************************************************

'Variable booleanas para determinar si está presionadas las teclas
Dim Ctrl As Boolean, Alt As Boolean, A As Boolean

'Constantes de las teclas Alt, Ctrl y a
Private Const vbKeyA = 65
Private Const vbKeyalt = 17
Private Const vbKeyControl = 18


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

        'Verifica las teclas Alt - Ctrl y la A
        If KeyCode = vbKeyalt Then Ctrl = True
        If KeyCode = vbKeyControl Then Alt = True
        If KeyCode = vbKeyA Then A = True

        'Si las 3 variables están en True .. mostramos un mensaje
        If Ctrl And Alt And A Then
            MsgBox "Hola"
            Form_KeyUp 0, 0
        End If

End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    
    'Cuando se produce KeyUp ponemos las variables en false
    Ctrl = False
    Alt = False
    A = False

End Sub

Private Sub Form_Load()

    'Establecemos la propiedad KeyPreview para que el formulario _
    'intercepte cualquier intento de presión de tecla

    Me.KeyPreview = True

    Me.Caption = " Ejemplo de  combinación de teclas "

    MsgBox " Presiona las teclas Ctrl+Alt+a", vbInformation

End Sub




che pero esto no es una api tanpoco tiene un bucle continuo yo queria saber sobre la api pero igual gracias por la info
  #7 (permalink)  
Antiguo 18/02/2010, 15:32
Avatar de mati987  
Fecha de Ingreso: febrero-2010
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Cita:
Iniciado por zxs23 Ver Mensaje
Prueba este ejemplo solo funciona cuando tienes el foco dentro del formulario.
Solo adaptalo para la tecla con la que quieras llamar a una funcion en este caso es una combinacion pero tambien sirve para 1 sola tecla.

Código:
Option Explicit
'***************************************************************************
'*  Nota: Colocar la propiedad KeyPreview del formulario en True
'***************************************************************************

'Variable booleanas para determinar si está presionadas las teclas
Dim Ctrl As Boolean, Alt As Boolean, A As Boolean

'Constantes de las teclas Alt, Ctrl y a
Private Const vbKeyA = 65
Private Const vbKeyalt = 17
Private Const vbKeyControl = 18


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

        'Verifica las teclas Alt - Ctrl y la A
        If KeyCode = vbKeyalt Then Ctrl = True
        If KeyCode = vbKeyControl Then Alt = True
        If KeyCode = vbKeyA Then A = True

        'Si las 3 variables están en True .. mostramos un mensaje
        If Ctrl And Alt And A Then
            MsgBox "Hola"
            Form_KeyUp 0, 0
        End If

End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    
    'Cuando se produce KeyUp ponemos las variables en false
    Ctrl = False
    Alt = False
    A = False

End Sub

Private Sub Form_Load()

    'Establecemos la propiedad KeyPreview para que el formulario _
    'intercepte cualquier intento de presión de tecla

    Me.KeyPreview = True

    Me.Caption = " Ejemplo de  combinación de teclas "

    MsgBox " Presiona las teclas Ctrl+Alt+a", vbInformation

End Sub




a y vi otro problema q no solo hace la accion la tecla q tocas si no todas las teclas
yo quiero q solo la aga control
  #8 (permalink)  
Antiguo 18/02/2010, 16:20
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

1 - Crea un nuevo proyecto
2 - Inserta un Timer1 y un Label1
Copia y pega este código
Pruébalo y verás como funciona correctamente esta API

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. ' Api Captura Teclado
  4. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  5.  
  6. Function KeysPressed(KeyCode1 As KeyCodeConstants, Optional KeyCode2 As KeyCodeConstants, Optional KeyCode3 As KeyCodeConstants) As Boolean
  7.   ' Funcion que devuelve VERDADERO si se pulsaron las teclas solicitadas
  8.  If GetAsyncKeyState(KeyCode1) >= 0 Then Exit Function
  9.   If KeyCode2 = 0 Then KeysPressed = True: Exit Function
  10.   If GetAsyncKeyState(KeyCode2) >= 0 Then Exit Function
  11.   If KeyCode3 = 0 Then KeysPressed = True: Exit Function
  12.   If GetAsyncKeyState(KeyCode3) >= 0 Then Exit Function
  13.   KeysPressed = True
  14. End Function
  15.  
  16. Private Sub Form_Load()
  17.   ' Activamos TIMER que capturará las teclas por ejemplo cada 10 milisegundos
  18.  Timer1.Interval = 10
  19.   Timer1.Enabled = True
  20.   ' Maximizamos la pantalla
  21.  Me.WindowState = vbMaximized
  22.   ' Ajustamos y centramos el Label
  23.  Label1.FontSize = 18
  24.   Label1.FontBold = True
  25.   Label1.ForeColor = vbRed
  26.   Label1.Caption = "oOo"
  27.   Label1.AutoSize = True
  28.   Label1.Move (Screen.Width - Label1.Width) / 2, (Screen.Height - Label1.Height) / 2
  29. End Sub
  30.  
  31. Private Sub Timer1_Timer()
  32.  ' Captura de Teclas en el Temporizador
  33. Timer1.Enabled = False
  34.  If KeysPressed(vbKeyLeft) Then
  35.    Label1.Move Label1.Left - 10
  36.  ElseIf KeysPressed(vbKeyUp) Then
  37.    Label1.Move Label1.Left, Label1.Top - 10
  38.  ElseIf KeysPressed(vbKeyDown) Then
  39.    Label1.Move Label1.Left, Label1.Top + 10
  40.  ElseIf KeysPressed(vbKeyRight) Then
  41.    Label1.Move Label1.Left + 10
  42.  End If
  43.  Timer1.Enabled = True
  44. End Sub
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #9 (permalink)  
Antiguo 18/02/2010, 17:28
Avatar de mati987  
Fecha de Ingreso: febrero-2010
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Cita:
Iniciado por erbuson Ver Mensaje
1 - Crea un nuevo proyecto
2 - Inserta un Timer1 y un Label1
Copia y pega este código
Pruébalo y verás como funciona correctamente esta API

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. ' Api Captura Teclado
  4. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  5.  
  6. Function KeysPressed(KeyCode1 As KeyCodeConstants, Optional KeyCode2 As KeyCodeConstants, Optional KeyCode3 As KeyCodeConstants) As Boolean
  7.   ' Funcion que devuelve VERDADERO si se pulsaron las teclas solicitadas
  8.  If GetAsyncKeyState(KeyCode1) >= 0 Then Exit Function
  9.   If KeyCode2 = 0 Then KeysPressed = True: Exit Function
  10.   If GetAsyncKeyState(KeyCode2) >= 0 Then Exit Function
  11.   If KeyCode3 = 0 Then KeysPressed = True: Exit Function
  12.   If GetAsyncKeyState(KeyCode3) >= 0 Then Exit Function
  13.   KeysPressed = True
  14. End Function
  15.  
  16. Private Sub Form_Load()
  17.   ' Activamos TIMER que capturará las teclas por ejemplo cada 10 milisegundos
  18.  Timer1.Interval = 10
  19.   Timer1.Enabled = True
  20.   ' Maximizamos la pantalla
  21.  Me.WindowState = vbMaximized
  22.   ' Ajustamos y centramos el Label
  23.  Label1.FontSize = 18
  24.   Label1.FontBold = True
  25.   Label1.ForeColor = vbRed
  26.   Label1.Caption = "oOo"
  27.   Label1.AutoSize = True
  28.   Label1.Move (Screen.Width - Label1.Width) / 2, (Screen.Height - Label1.Height) / 2
  29. End Sub
  30.  
  31. Private Sub Timer1_Timer()
  32.  ' Captura de Teclas en el Temporizador
  33. Timer1.Enabled = False
  34.  If KeysPressed(vbKeyLeft) Then
  35.    Label1.Move Label1.Left - 10
  36.  ElseIf KeysPressed(vbKeyUp) Then
  37.    Label1.Move Label1.Left, Label1.Top - 10
  38.  ElseIf KeysPressed(vbKeyDown) Then
  39.    Label1.Move Label1.Left, Label1.Top + 10
  40.  ElseIf KeysPressed(vbKeyRight) Then
  41.    Label1.Move Label1.Left + 10
  42.  End If
  43.  Timer1.Enabled = True
  44. End Sub



muchas gracias ahora veo q tal esta
  #10 (permalink)  
Antiguo 19/02/2010, 00:36
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

Por favor, si no es absolutamente necesario, utiliza el boton de la izquierda que indica RESPONDER y no el de la derecha de CITAR, y verás como los mensajes resultan mas fáciles de leer.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #11 (permalink)  
Antiguo 19/02/2010, 09:39
Avatar de mati987  
Fecha de Ingreso: febrero-2010
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Estaba haciendo esta api y no me lo hace si podes ayudar mejor

a perdon es q soy nuevo en foros del web

Etiquetas: basic, codigos, getasynckeystate, vb6, vb6.0, visual, juegos, api
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:16.