Ver Mensaje Individual
  #5 (permalink)  
Antiguo 29/06/2008, 09:13
Avatar de seba123neo
seba123neo
 
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 18 años, 3 meses
Puntos: 19
Respuesta: Saver cuando se ha pulsado una tecla fuera del form

bueno hay una forma facil y otra un poco mas rebuscada pero mucho mejor,la forma facil usa un timer para verificar la tecla presionada,como veras los timers usan recursos de la pc ya que estan a cada instante verificando si se presiono o no,la otra forma es mas complicada ,es un Hook al sistema o sea para resumirlo ,es como si desde tu programa interceptaces las teclas del teclado,esto se hace sin timer,ya que es algo que detecta el mensaje que produce windows al apretar la tecla..

aca te dejo las 2 formas...

Primera Forma:

Detectar la tecla presionada en cualquier ventana de Windows

Segunda Forma Hook:

En un modulo(bas) pone:

Código:
Option Explicit
Public hKbdHook As Long
Private Const WH_KEYBOARD_LL As Integer = 13
Private Const HC_ACTION As Integer = 0
Private Const WM_KEYDOWN As Long = &H100

Private Type KBDLLHOOKSTRUCT
vkCode As Integer
scanCode As Integer
flags As Integer
time As Integer
dwExtraInfo As Integer
End Type

Private 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 UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Integer
Dim kbdllhs As KBDLLHOOKSTRUCT
CopyMemory kbdllhs, ByVal lParam, Len(kbdllhs)
If nCode = HC_ACTION Then
LowLevelKeyboardProc = CallNextHookEx(hKbdHook, nCode, wParam, lParam)
Select Case wParam
Case WM_KEYDOWN
If kbdllhs.vkCode = 13 Then
MsgBox "apretaste el enter"
End If
End Select
Else: LowLevelKeyboardProc = CallNextHookEx(hKbdHook, nCode, wParam, lParam)
End If
End Function

Sub Main()
hKbdHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0&)
If hKbdHook = 0 Then
MsgBox "Fallo el Hook", vbCritical, "Hook Teclado"
Exit Sub
End If
form1.Show
End Sub
En el formulario pone:

Código:
Option Explicit

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Call UnhookWindowsHookEx(hKbdHook)
End Sub
con eso ya esta,pone que tu programa se inicie desde el Sub_Main si no sabes como,tenes que ir al menu Proyecto-->propiedades de proyecto.... y ahi en objeto inicial ponele sub_main...este ejemplo detecta la tecla enter(codigo 13) en cualquier ventana sin timers,vos cambiale el codigo de la tecla que quieras,cada tecla tiene un codigo buscalos...

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein