PDA

Ver la versión completa : capturar Tecla Windows



rebrok
21-02-2005, 20:15
estoy haciendo un programa en VB6 y kisiera saber cmo capturar la tecla de Windows cn un Keypress,.

gradias salu2

Ivanchuk
22-02-2005, 01:25
Imagino que lo que queres hacer es capturar TODAS las teclas de windows, algo asi como un KeyLogger. We para hacer eso vas a tener que hacer una dll, pues solo asi podras capturar todas las teclas pulsadas. Es decir una dll que agarre las teclas y mande un mensaje a la aplicacion que carga dicha dll. Mira algo de Hooks, si mal no recuerdo las funciones que tenes que usar tan en kernel32.dll, algo asi como SetHookWindowsEx, UnHookWindowsEx, creo que por ahi van los nombres. 1saludo

juanma.m.d
22-02-2005, 14:49
yo creo q se refiere a capturar la tecla q hay entre el alt y el control

<PICCOLO>
22-02-2005, 18:54
Esa tecla donde tengo yo pegado un pinguino en miniatura :P

-salu2-

juanma.m.d
22-02-2005, 19:12
jajaja xDDD

diarrea
22-02-2005, 20:48
Mm supongo que tendrás que usar API xq el keyascii solo vale para teclas 'normales'.
Quizás con GetKeyState.

Ivanchuk
24-02-2005, 16:21
Jajaja, de vez en cuando me ataca el delirio :0= , me parece que el vasito de vodka por la mañana me ta haciendo mal, jajaja. We la tecla windows es una tecla extendida, el codigo scan de la misma esta en el segundo byte y no en el primero. De VB ni jota, asi que solo te puedo decir eso. 1saludo.

etirini17
24-02-2005, 22:40
como es eso del "codigo Scan" quiero aprendeer de eso, de donde lo saco?

Ivanchuk
26-02-2005, 22:12
Wewe, i feel good, shararararara, al code plizz :0= :


'***************** FORMULARIO *************************
Private Sub Form_Load()
'eso mismo
IniHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
'byebye
FinHook
End Sub
'***************** MODULO *****************************
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Public Const WH_KEYBOARD = 2
Public ResulHook As Long
Public Function Teclas(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim nombre As String
nombre = Space$(100)
'quiero el nombre de la tecla
GetKeyNameText lParam, nombre, 100
MsgBox nombre
'siguiente por favor XDD
Teclas = CallNextHookEx(ResulHook, WH_KEYBOARD, wParam, lParam)
End Function
Public Sub IniHook()
'habla por si sola, los parametros son:
'WH_KEYBOARD porque queremos agarrar solo los eventos de teclado
'direccion de la funcion a ser llamada
'manejador de la instancia, le paso cero y que!!
'Identificador de hilo actual
ResulHook = SetWindowsHookEx(WH_KEYBOARD, Direc(AddressOf Teclas), 0, GetCurrentThreadId)
End Sub
Public Function Direc(ByVal unadir As Long) As Long
Direc = unadir
End Function
Public Sub FinHook()
'juira hook
UnhookWindowsHookEx ResulHook
End Sub

Agarra todas las teclas de la aplicacion incluyendo la de Uindous :o . 1saludo