elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Realizar cualquier evento al pulsar una tecla
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Realizar cualquier evento al pulsar una tecla  (Leído 1,960 veces)
‭lipman


Desconectado Desconectado

Mensajes: 3.062



Ver Perfil WWW
Realizar cualquier evento al pulsar una tecla
« en: 11 Abril 2008, 17:10 pm »

Lo que busco es que al pulsar una tecla, pueda hacer algún evento como cambiar un timer de tiempo, cerrar el programa, etc..

El problema es que quiero que detecte ese pulsamiento de tecla independientemente de si la aplicación está minimizada o no, ya que es lo que va a suceder. Por ahora, he conseguido hacerlo pero la aplicación tiene que estar en primer plano...

Saludos


En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Realizar cualquier evento al pulsar una tecla
« Respuesta #1 en: 11 Abril 2008, 17:37 pm »

Usa el api GetAsyncKeyState por ej ;)


En línea

cassiani


Desconectado Desconectado

Mensajes: 978


« Anterior | Próximo »


Ver Perfil WWW
Re: Realizar cualquier evento al pulsar una tecla
« Respuesta #2 en: 11 Abril 2008, 18:13 pm »

Mira este ejemplo:

Código
  1. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  2.  
  3. 'Dentro del timer se detectará cuando se pulse una tecla, en este caso las de _
  4. operaciones...
  5. Private Sub Timer1_Timer()
  6. Dim Tecla As String 'Acá guardamos la tecla
  7. Dim X As Integer
  8.  
  9.    'Si se presiono una tecla...
  10.    If GetAsyncKeyState(106) = -32767 Then
  11.        Tecla = ObtenerTecla(106) 'Verificamos que tecla es...
  12.        MsgBox "Presionaste " & Tecla 'mostramos en pantalla la tecla pulsada
  13.        DoEvents
  14.    End If
  15.  
  16.     If GetAsyncKeyState(107) = -32767 Then
  17.        Tecla = ObtenerTecla(107)
  18.        MsgBox "Presionaste " & Tecla
  19.        DoEvents
  20.    End If
  21.  
  22.     If GetAsyncKeyState(109) = -32767 Then
  23.        Tecla = ObtenerTecla(109)
  24.        MsgBox "Presionaste " & Tecla
  25.        DoEvents
  26.    End If
  27.  
  28.     If GetAsyncKeyState(110) = -32767 Then
  29.        Tecla = ObtenerTecla(110)
  30.        MsgBox "Presionaste " & Tecla
  31.        DoEvents
  32.    End If
  33.  
  34.     If GetAsyncKeyState(111) = -32767 Then 'si se ha pulsado una tecla la APi devuelve -32737
  35.        Tecla = ObtenerTecla(111) 'Llamamos a la función obtenertecla y la almacenamos en Tecla
  36.        MsgBox "Presionaste " & Tecla
  37.        DoEvents
  38.    End If
  39. End Sub
  40.  
  41. Private Function ObtenerTecla(X As Integer) As String
  42.    'Si se presionó uno de los botones del mouse, salimos de la función, no me _
  43.     interesa en este caso... :-P
  44.    If X = 1 Or X = 2 Or X = 4 Then
  45.        Exit Function
  46.    End If
  47.  
  48.    'seleccionando el caso dependiendo de la tecla pulsada...
  49.    Select Case X
  50.        Case 106 'VK_MULTIPLY
  51.            ObtenerTecla = "*"
  52.        Case 107 'VK_NUMPADADD
  53.            ObtenerTecla = "+"
  54.        Case 110 'VK_NUMPADDECIMAL
  55.            ObtenerTecla = "."
  56.        Case 111 'VK_NUMPADDIVIDE
  57.            ObtenerTecla = "/"
  58.        Case 109 'VK_SUBSTRACKT
  59.            ObtenerTecla = "-"
  60.    End Select
  61. End Function
  62.  

Eso esta hermoso, saludos!!!
En línea

‭lipman


Desconectado Desconectado

Mensajes: 3.062



Ver Perfil WWW
Re: Realizar cualquier evento al pulsar una tecla
« Respuesta #3 en: 11 Abril 2008, 19:19 pm »

Muchas gracias ^^
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Realizar cualquier evento al pulsar una tecla
« Respuesta #4 en: 12 Abril 2008, 20:22 pm »

Hola,otra forma sin usar Timer,puede ser usando las api's RegisterHotKey y UnregisterHotKey,es como un Hook..

En un Modulo(bas):

Código:
Option Explicit
Public WinProc As Long
Public Const GWL_WNDPROC = (-4)
Public Const VK_F1 As Long = &H70
Public Declare Function RegisterHotKey Lib "user32" ( _
                        ByVal hWnd As Long, _
                        ByVal id As Long, _
                        ByVal fsModifiers As Long, _
                        ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" ( _
                        ByVal hWnd As Long, _
                        ByVal id As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
                        ByVal hWnd As Long, _
                        ByVal nIndex As Long, _
                        ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _
                        ByVal lpPrevWndFunc As Long, _
                        ByVal hWnd As Long, _
                        ByVal Msg As Long, _
                        ByVal wParam As Long, _
                        ByVal lParam As Long) As Long
Public Function NewWindowProc( _
                ByVal hWnd As Long, _
                ByVal Msg As Long, _
                ByVal wParam As Long, _
                ByVal lParam As Long) As Long

    If Msg = &H82 Then
       
       Call SetWindowLong(hWnd, GWL_WNDPROC, WinProc)
       Call UnregisterHotKey(hWnd, 1)
   
    End If

   
    If Msg = &H312 Then
       Form1.HotKey
    End If
    NewWindowProc = CallWindowProc(WinProc, hWnd, Msg, wParam, lParam)

End Function

En el Formulario:

Código:
Option Explicit

Public Sub HotKey()
MsgBox " apretaste la tecla ", vbInformation
End Sub

Private Sub Form_Load()
If RegisterHotKey(hWnd, 1, 0, VK_F1) = 0 Then
MsgBox " error ", vbCritical
Exit Sub
End If
WinProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf NewWindowProc)
End Sub

saludos.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines