capturar eventos del teclado sin foco
Publicado por juan cavieres (1 intervención) el 30/12/2009 13:18:50
Hola a todos. Estoy haciendo un programa en el que necesito capturar todos los eventos de teclado sin importar quien tenga el foco en el formulario. Y ahí está mi duda, hay algun contenedor "principal" que reciba los eventos antes de lanzarlos a los distintos elementos.
mi programa consiste en que es un contador si presiono la tecla "intro", me resta uno (-1) y si pulso la tecla "espacio" aumenta uno (+1) y por ultimo al presionar la tecla "r" el contador se reinicia (0).
esto quiero dejarlo fuera de foco y cuando presione esas teclas correspondientes haga la funciones que tengan que hacer.
Les dejo el código para que lo vean:
ption Explicit
Private Declare Function SetWindowPos Lib "User32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOZORDER = &H4
Const SWP_NOREDRAW = &H8
Const SWP_NOACTIVATE = &H10
Const SWP_FRAMECHANGED = &H20
Const SWP_SHOWWINDOW = &H40
Const SWP_HIDEWINDOW = &H80
Const SWP_NOCOPYBITS = &H100
Const SWP_NOOWNERZORDER = &H200
Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
Const HWND_TOP = 0
Const HWND_BOTTOM = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Private Sub Form_Load()
Dim i
i = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
End Sub
Private Sub Form_LostFocus()
frmPrincipal.Show 1
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
If (KeyAscii = 32) Then
lblNumero = CInt(lblNumero) + 1
End If
If (KeyAscii = 13) Then
lblNumero = CInt(lblNumero) - 1
End If
If (KeyAscii = 114) Then
lblNumero = 0
End If
End Sub
espero que me puedan ayudar....
mi programa consiste en que es un contador si presiono la tecla "intro", me resta uno (-1) y si pulso la tecla "espacio" aumenta uno (+1) y por ultimo al presionar la tecla "r" el contador se reinicia (0).
esto quiero dejarlo fuera de foco y cuando presione esas teclas correspondientes haga la funciones que tengan que hacer.
Les dejo el código para que lo vean:
ption Explicit
Private Declare Function SetWindowPos Lib "User32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOZORDER = &H4
Const SWP_NOREDRAW = &H8
Const SWP_NOACTIVATE = &H10
Const SWP_FRAMECHANGED = &H20
Const SWP_SHOWWINDOW = &H40
Const SWP_HIDEWINDOW = &H80
Const SWP_NOCOPYBITS = &H100
Const SWP_NOOWNERZORDER = &H200
Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
Const HWND_TOP = 0
Const HWND_BOTTOM = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Private Sub Form_Load()
Dim i
i = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
End Sub
Private Sub Form_LostFocus()
frmPrincipal.Show 1
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
If (KeyAscii = 32) Then
lblNumero = CInt(lblNumero) + 1
End If
If (KeyAscii = 13) Then
lblNumero = CInt(lblNumero) - 1
End If
If (KeyAscii = 114) Then
lblNumero = 0
End If
End Sub
espero que me puedan ayudar....
Valora esta pregunta
0