Дравер для джойстика :). (DirectInput)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
-=alp=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 147
Зарегистрирован: 08.03.2003 (Сб) 19:20

Дравер для джойстика :). (DirectInput)

Сообщение -=alp=- » 06.02.2004 (Пт) 10:42

Я пытаюсь типа драйвер создать, но есть одна проблема:

Option Explicit
Dim dx As New DirectX8 'îáúåêò DirectX
Dim di As DirectInput8 'îáúåêò DirectInput
Dim diDev As DirectInputDevice8 'óñòðîéñòâî DirectInput
Dim diState As DIJOYSTATE2 'ñòðóêòóðà, ñîäåðæàùàÿ ñîñòîÿíèå êëàâèàòóðû

Private Sub Form_Load()
Me.Show

If Not InitDI() Then
MsgBox "Íåâîçìîæíî èíèöèàëèçèðîâàòü DirectInput."
End
End If

Timer1.Enabled = True
End Sub

Public Function InitDI() As Boolean
On Local Error Resume Next
Set di = dx.DirectInputCreate()
If di Is Nothing Then Exit Function


Set diDev = di.CreateDevice("guid_SysMouse")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
вот в этой строке где стоит guid_SysMouse должно что-то другое стоять
вовсех монуалах по DirectInput
написано что для мышки и клавиатуры есть стандартные значения (которое мы выше и наблюдаем)
а для джойстика мол надо находить с помошью функции EnumDevices()
ну нету такой функции на VB есть только GetDIDevices()
я делаю следуюшее:

Set frrf = di.GetDIDevices(DI8DEVCLASS_GAMECTRL, DIEDFL_ATTACHEDONLY)
Set diDev = di.CreateDevice(frrf)

VB ругаеться мол тип не тот ну это то понятно а как по другому я не знаю

If diDev Is Nothing Then Exit Function

diDev.SetCommonDataFormat DIFORMAT_JOYSTICK2
diDev.SetCooperativeLevel Me.hWnd, DISCL_NONEXCLUSIVE Or DISCL_BACKGROUND
diDev.Acquire

InitDI = True
End Function

Public Sub CleanUp()
diDev.Unacquire
Set diDev = Nothing
Set di = Nothing
End Sub

Private Sub Form_Unload(Cancel As Integer)
CleanUp
End Sub

Private Sub Timer1_Timer()
Dim iKeyCounter As Integer

diDev.GetDeviceStateJoystick2 diState

List1.Clear

For iKeyCounter = 0 To 127
If diState.Buttons(iKeyCounter) <> 0 Then
List1.AddItem KeyNames(iKeyCounter)
End If
Next
End Sub

А теперь в крадце о том, что выше написано мне просто нужно узнать какую кнопку я нажимаю на джойстике.

Джойстик (для тех кто разбираеться) MB-25 (LPT+Usb) (он похож на джойстик от плейстэйшон) подключен к LPT порту.

И на последок ещё один вопрос если адрес LPT1 порта 0X378 то у USB какой?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.02.2004 (Пт) 10:57

Во-первых. То, что ты пишешь, не драйвер ни в коем случае :twisted:
Во-вторых. Сильно сомневаюсь, чтобы была предопредлённая константа для джойстика (а для системной клавы и мыши они есть). Поэтому направь свои стопы примерно в dinput8.createdevice(dinput8.getdidevices(di8devtype_joystick,diedfl_attachedonly).getitem(1).getguidinstance). Это если у тебя 1 джойстик, а если много, то просматривай возвращаемую коллекцию.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

-=alp=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 147
Зарегистрирован: 08.03.2003 (Сб) 19:20

Сообщение -=alp=- » 06.02.2004 (Пт) 13:42

спосибо
я уже решил эту проблему


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList  
cron