Visual Basic - Asignacion de evento click a tecla

Life is soft - evento anual de software empresarial
 
Vista:

Asignacion de evento click a tecla

Publicado por pabiloncio (1 intervención) el 03/04/2007 15:17:35
Hola a todos. Estoy usando MS Visual Studio 2005 y llevo varios días dandole vueltas a un programita que estoy haciendo para poder manejar el windows mediante los mandos de una máquina recreativa.
Para ello hay que simular que los botones y el mando de direccion son teclas del teclado y asignarle funciones de ratón a estas teclas.
El problema está en que ya he logrado mover el cursor por la pantalla mediante las teclas "w","a","s" y "d" ; pero intento asignarle a la "q" la funcion "Click" y no veo la manera. Lo más cerca que he estado es asignarle al objeto donde se encuentre el cursor (mediante las coordenadas en la pantalla) la propiedad "PerformClick()" cuando se pulsa "q", pero esto me parece un poco cutre, además no sirve fuera de los límites de los objetos a los que se les ha asignado esta propiedad.

Mi idea es crear una aplicacion, para dejarla ejecutandose en segundo plano, mediante la cual pueda manejar Windows y los emuladores de la máquina recreativa sin necesidad de usar un ratón.
Se que existen softwares (tanto de Windows como amateurs) que me solucionarían el problema, pero he de hacerlo yo, ya que la máquina recreativa es un proyecto de fin de curso :-z

Que alguien me de una pista de por donde continuar plis

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Asignacion de evento click a tecla

Publicado por JuanC (68 intervenciones) el 03/04/2007 16:52:50
Ver la API mouse_event

//Ejemplo de un clic con btn izquierdo en C

mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,NULL,NULL);

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Asignacion de evento click a tecla

Publicado por moylop260 (1 intervención) el 13/04/2007 23:49:27
Para simular el click del raton

'------En un módulo
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Private Declare Function PostMessageBynum Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam _
As Long) As Long 'enviar mensajes al control
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal _
Y As Long) As Long 'posicionar el puntero del ratón
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, _
lpRect As RECT) As Long 'obtener la posición del control
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

'----- ahora el proceso , es decir crea y boton y agrega esta funcion:
Dim l As Long, PosX As Long, PosY As Long, PosXY As Long
Dim lpRect As RECT

'conocer las posición del botón relativa a la pantalla, en pixels
l = GetWindowRect(Command1.hwnd, lpRect)
'colocar el ratón sobre el centro del botón
PosX = lpRect.Left + ((lpRect.Right - lpRect.Left) / 2)
PosY = lpRect.Top + ((lpRect.Bottom - lpRect.Top) / 2)
l = SetCursorPos(PosX, PosY)
'obtener la posicion del centro del control relativa al propio control,
'en pixels
'no es obligatorio, es para que las coordenadas recibidas en el mousedown
'del control sean coherentes
'la posicion y va en la palabra alta y la x en la baja
PosXY = (PosY - lpRect.Top) * 65536 + (PosX - lpRect.Left)
'simular el click del ratón
l = PostMessageBynum(Command1.hwnd, WM_LBUTTONDOWN, 0&, PosXY)
l = PostMessageBynum(Command1.hwnd, WM_LBUTTONUP, 0&, PosXY)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar