Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda Para Crear Un Joystick Mapper

Iniciado por juancebolla, 23 de Febrero de 2005, 09:35:02 AM

« anterior - próximo »

juancebolla

 Hola soy un programador de Visual Basic y estoy intentando crear un programa que me mapee el Joystick de forma que al pulsar un boton este simule que se a pulsado una tecla del teclado.
Lo he conseguido desarrollar, pero con los programas basados con DirectX no me funciona, ¿sabeis lo que debo de hacer?.
Para emular la pulsación de la tecla utilizo la funcion keybd_event:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _

  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)


llamandolas de este modo:

Public Sub pKeyDOWN(iKey As Integer)
'iKey=ASC("A")

 keybd_event iKey, 0, 0, 0

End Sub

Public Sub pKeyUP(iKey As Integer)

 keybd_event iKey, 0, KEYEVENTF_KEYUP, 0

End Sub


Bueno, pues resulta que DirectX no me reconoce la emulacion de la pulsación de las teclas.
Lo que me haria falta es una funcion que simule como si yo hubiera pulsado una tecla,
es decir un SendKey(tecla) pero separado en SendKeyUP(tecla) y SendKeyDown(tecla).
Para asi poder decir que cuando pulse el Joystick, que envie la pulsación de la tecla al programa que este activo en ese momento, no se si me explico.
Esto sirve para juegos que utilizan solo el teclado y no puedes utilizar el joystick, emulo el teclado mediante el joystick, utilizando el joystick para jugar en vez del teclado.
Pero resulta que para juegos o programas desarrollados con DirectX no me reconocen el SendKey ni el keybd_event no se si es que tengo que hacer el EXE o es que para DirectX hay que utilizar otras funciones para simular la pulsación de la tecla.

¿Podeis ayudarme?
Muchas gracias.

Sacrifai

 La verdad, yo ni de VB ni de Joystick... asi que no puedo ayudarte. ¿Pero que tal si pruebas a meter los eventos en un arreglo de booleanos?

senior wapo

 keybd_event y mouse_event funcionan con programas DirectX al menos hasta la DX8 (nunca lo he visto con DX9, pero debería) , de hecho, es el API que utilizan los programs de macros que automatizan juegos (bots).

La pega es que el evento lo recibe el sistema operativo y lo distribuye a la aplicación que le vienen en gana (la que tiene el foco supuestamente). Asegurate que el juego mantiene el foco, porque si es tu aplicación, seras tu quien reciba tu propio evento y no el juego.

[EX3]

 
Cita de: "senior wapo"keybd_event y mouse_event funcionan con programas DirectX al menos hasta la DX8 (nunca lo he visto con DX9, pero debería) , de hecho, es el API que utilizan los programs de macros que automatizan juegos (bots).
Esta duda que esta planteando juancebolla viene de un post del foro de mi web donde me planteo la misma duda y para tu sorpresa y mas la mia descubri que ni la funcion SendKeys() del VB ni keyb_event() del API de Windows las reconoce DirectInput ya que probe realizando el envio de teclas desde el mismo programa que las tenia que recibir, y el programa en si si recibia las pulsaciones, pero DirectInput ni se inmutaba.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

senior wapo

 Entre los los jugadores de ciertas clases en Everquest era muy popular el autofire, un programa basado en keybd_event:

http://www.eqhunter.com/Files/Autofire_0_4.zip

Bien puede ser que Everquest aceptara eventos de teclado tanto desde DirectInput como desde el bucle de mensajes de la ventana, pero usar, usaba DirectInput seguro, no solo el bucle de mensajes (si es que usaba los mensajes WM_KEYDOWN que eso ya no lo se). NO lo he probado desde que se pasaron a DX9 hace ya 1 año (ni tenia Windows XP entonces).

Si no es un tema de versiones de Windows/DirectX, entonces no queda mas narices que enganchar el proceso del juego e interceptar el interfaz con DirectInput (tarea nada cómoda por cierto).

[EX3]

 En la documentacion de DirectInput no encontre nada similar al keyb_event(). Se puede hacer tal cosa con DirectInput?

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Andvari3D

 hay un programa que hace EXACTAMENTE eso, se llama joytokey






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.