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

Saver cuando se ha pulsado una tecla fuera del form

Estas en el tema de Saver cuando se ha pulsado una tecla fuera del form en el foro de Visual Basic clásico en Foros del Web. Estoy pensando hacer un trainer para un juego y quiero que se detecte cuando he pulsado F1 Este codigo no me sirve porque si entro ...
  #1 (permalink)  
Antiguo 28/06/2008, 11:58
 
Fecha de Ingreso: septiembre-2007
Mensajes: 189
Antigüedad: 16 años, 7 meses
Puntos: 1
Saver cuando se ha pulsado una tecla fuera del form

Estoy pensando hacer un trainer para un juego y quiero que se detecte cuando he pulsado F1 Este codigo no me sirve porque si entro en el juego ya no funciona.
Código:
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF1 Then MsgBox "hiiiiiiii"
End Sub
Alguien save?
Gracias y un saludo!
  #2 (permalink)  
Antiguo 28/06/2008, 14:12
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Saver cuando se ha pulsado una tecla fuera del form

Cita:
Iniciado por magTpeak Ver Mensaje
Estoy pensando hacer un trainer para un juego y quiero que se detecte cuando he pulsado F1 Este codigo no me sirve porque si entro en el juego ya no funciona.
Código:
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF1 Then MsgBox "hiiiiiiii"
End Sub
Alguien save?
Gracias y un saludo!
Solo le tienes que poner la propiedad KeyPreview en el Form a True y estés en el control que estés la evaluará.

  #3 (permalink)  
Antiguo 28/06/2008, 21:50
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Saver cuando se ha pulsado una tecla fuera del form

Hola,mmm para mi vos lo que qeures es que te detecte la tecla estando en la ventana del juego,para eso tenes que usar api's,porque los eventos del formulario ya no valdrian si el form no tiene el foco...

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #4 (permalink)  
Antiguo 29/06/2008, 01:47
 
Fecha de Ingreso: septiembre-2007
Mensajes: 189
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: Saver cuando se ha pulsado una tecla fuera del form

Cita:
Iniciado por seba123neo Ver Mensaje
Hola,mmm para mi vos lo que qeures es que te detecte la tecla estando en la ventana del juego,para eso tenes que usar api's,porque los eventos del formulario ya no valdrian si el form no tiene el foco...

saludos.
y como se hace eso?
  #5 (permalink)  
Antiguo 29/06/2008, 09:13
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 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
  #6 (permalink)  
Antiguo 02/07/2008, 11:43
 
Fecha de Ingreso: septiembre-2007
Mensajes: 189
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: Saver cuando se ha pulsado una tecla fuera del form

Gracias! Exelente respuesta!
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 11:34.