JoyStick: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
=== Logitech Attack 3 Controller === | === Logitech Attack 3 Controller === | ||
<nowiki> Attribute VB_Name = "Module1" | |||
'Dieser Source stammt von http://www.vb-fun.de | |||
'und kann frei verwendet werden. Für eventuelle Schäden | |||
'wird nicht gehaftet. | |||
'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. | |||
'Ansonsten viel Spaß und Erfolg mit diesem Source ! | |||
Option Explicit | |||
Dim DX As New DirectX7 | |||
Dim DI As DirectInput | |||
Dim diJoystick() As DirectInputDevice | |||
Const JOYSTICKCENTERED = 32768 | |||
Dim JSButton() As Single | |||
Dim Button() As Long | |||
Public test | |||
Public jpos As Integer | |||
Public Const UNKLAR = 99 | |||
Public Const MITTE = 0 | |||
Public Const WEG = 1 | |||
Public Const HIN = 2 | |||
Public Const GANZ_WEG = 3 | |||
Public Const GANZ_HIN = 4 | |||
Public Const ANSCHLAG_WEG = 5 | |||
Public Const ANSCHLAG_HIN = 6 | |||
Public Const WEITER_HIN = 7 | |||
Public Const WEITER_WEG = 8 | |||
Public jsknopf As Boolean | |||
Public m1, m2, v1, v2, v3, h1, h2, h3 | |||
' | |||
Public Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long | |||
' | |||
Public Function DInput_Init() As Boolean | |||
Dim Caps As DIDEVCAPS | |||
Dim diEnumObjects As DirectInputEnumDeviceObjects | |||
Dim enumDevice As DirectInputEnumDevices | |||
Dim i As Single | |||
On Error GoTo ErrEnd | |||
'erstelle das DirectInput-Objekt | |||
Set DI = DX.DirectInputCreate() | |||
'Auflistung aller angeschlossenen Joysticks einlesen | |||
Set enumDevice = DI.GetDIEnumDevices(DIDEVTYPE_JOYSTICK, DIEDFL_ATTACHEDONLY) | |||
If enumDevice.GetCount = 0 Then | |||
MsgBox "There are no Joysticks connected to this PC!", vbInformation | |||
Exit Function | |||
End If | |||
ReDim diJoystick(enumDevice.GetCount) As DirectInputDevice | |||
ReDim JSButton(enumDevice.GetCount) As Single | |||
'und nun pro Joystick | |||
For i = 1 To enumDevice.GetCount | |||
'setze Input-Objekt pro Joystick | |||
Set diJoystick(i) = DI.CreateDevice(enumDevice.GetItem(i).GetGuidInstance) | |||
'hole Produktname | |||
Jsbilder.List2.AddItem enumDevice.GetItem(i).GetProductName | |||
'setze DirectInput DatenFormat auf Joystick | |||
diJoystick(i).SetCommonDataFormat DIFORMAT_JOYSTICK | |||
'setze cooperative Level | |||
diJoystick(i).SetCooperativeLevel Jsbilder.hWnd, DISCL_BACKGROUND Or DISCL_EXCLUSIVE | |||
'hole Fähigkeiten des Joysticks | |||
diJoystick(i).GetCapabilities Caps | |||
'irgendwelche Fähigkeiten hat der Joystick hoffentlich | |||
If Caps.lFlags Then | |||
'hole Button-Auflistung vom Joystick | |||
Set diEnumObjects = diJoystick(i).GetDeviceObjectsEnum(DIDFT_BUTTON) | |||
'wieviele Button hat der Joystick | |||
JSButton(i) = diEnumObjects.GetCount | |||
ReDim Button(i, diEnumObjects.GetCount) | |||
diJoystick(i).Acquire | |||
diJoystick(i).Poll | |||
Set diEnumObjects = Nothing | |||
End If | |||
Next i | |||
DInput_Init = True | |||
Exit Function | |||
ErrEnd: | |||
MsgBox "Direct Input konnte nicht initialisiert werden!" & vbCr & _ | |||
"Anwendung wird beendet.", vbExclamation | |||
DInput_Init = False | |||
End Function | |||
Public Function CheckInput() As Integer | |||
Dim JoystickState As DIJOYSTATE | |||
Dim i As Single | |||
Dim strhilf As String | |||
Dim temp, jpv, j | |||
'On Error Resume Next | |||
j = 0 | |||
s1: | |||
j = j + 1 | |||
'stelle Verbindung her | |||
diJoystick(Jsbilder.List2.ListIndex + 1).Acquire | |||
'mache Daten verfügbar | |||
diJoystick(Jsbilder.List2.ListIndex + 1).Poll | |||
'hole aktuelle Daten | |||
diJoystick(Jsbilder.List2.ListIndex + 1).GetDeviceState Len(JoystickState), JoystickState | |||
'frmMain.txt_XY.Text = "X: " & (JoystickState.x - JOYSTICKCENTERED) & vbCrLf & _ | |||
' "Y: " & (JoystickState.y - JOYSTICKCENTERED) & vbCrLf & _ | |||
' "Z: " & (JoystickState.z - JOYSTICKCENTERED) | |||
temp = 32768 - Val(JoystickState.y - JOYSTICKCENTERED) | |||
jpos = UNKLAR | |||
If temp > m1 And temp < m2 Then jpos = MITTE | |||
' | |||
If temp < m1 And temp > v1 Then jpos = HIN | |||
If temp > v2 And temp < v1 Then jpos = WEITER_HIN | |||
If temp > v3 And temp < v2 Then jpos = GANZ_HIN | |||
If temp < v3 Then jpos = ANSCHLAG_HIN | |||
' | |||
If temp > m2 And temp < h1 Then jpos = WEG | |||
If temp > h1 And temp < h2 Then jpos = WEITER_WEG | |||
If temp > h2 And temp < h3 Then jpos = GANZ_WEG | |||
If temp > h3 Then jpos = ANSCHLAG_WEG | |||
' | |||
If JoystickState.buttons(0) > 0 Then jsknopf = True Else jsknopf = False | |||
'stelle Verbindung her | |||
diJoystick(Jsbilder.List2.ListIndex + 1).Acquire | |||
'mache Daten verfügbar | |||
diJoystick(Jsbilder.List2.ListIndex + 1).Poll | |||
'hole aktuelle Daten | |||
diJoystick(Jsbilder.List2.ListIndex + 1).GetDeviceState Len(JoystickState), JoystickState | |||
'frmMain.txt_XY.Text = "X: " & (JoystickState.x - JOYSTICKCENTERED) & vbCrLf & _ | |||
' "Y: " & (JoystickState.y - JOYSTICKCENTERED) & vbCrLf & _ | |||
' "Z: " & (JoystickState.z - JOYSTICKCENTERED) | |||
temp = 32768 - Val(JoystickState.y - JOYSTICKCENTERED) | |||
jpv = UNKLAR | |||
' | |||
If temp > m1 And temp < m2 Then jpv = MITTE | |||
' | |||
If temp < m1 And temp > v1 Then jpv = HIN | |||
If temp > v2 And temp < v1 Then jpv = WEITER_HIN | |||
If temp > v3 And temp < v2 Then jpv = GANZ_HIN | |||
If temp < v3 Then jpv = ANSCHLAG_HIN | |||
' | |||
If temp > m2 And temp < h1 Then jpv = WEG | |||
If temp > h1 And temp < h2 Then jpv = WEITER_WEG | |||
If temp > h2 And temp < h3 Then jpv = GANZ_WEG | |||
If temp > h3 Then jpv = ANSCHLAG_WEG | |||
If jpos <> jpv Then jpos = UNKLAR | |||
If jpos = UNKLAR Then | |||
If j < 10 Then GoTo s1 | |||
End If | |||
' | |||
If test Then | |||
Jsbilder.Label2.Visible = True | |||
If jpos = UNKLAR Then Jsbilder.Label2.Caption = "UNKLAR " + CStr(temp) | |||
If jpos = MITTE Then Jsbilder.Label2.Caption = "MITTE " + CStr(temp) | |||
If jpos = WEG Then Jsbilder.Label2.Caption = "WEG " + CStr(temp) | |||
If jpos = GANZ_WEG Then Jsbilder.Label2.Caption = "GANZ_WEG " + CStr(temp) | |||
If jpos = ANSCHLAG_WEG Then Jsbilder.Label2.Caption = "ANSCHLAG_WEG " + CStr(temp) | |||
If jpos = HIN Then Jsbilder.Label2.Caption = "HIN " + CStr(temp) | |||
If jpos = GANZ_HIN Then Jsbilder.Label2.Caption = "GANZ_HIN " + CStr(temp) | |||
If jpos = ANSCHLAG_HIN Then Jsbilder.Label2.Caption = "ANSCHLAG_HIN " + CStr(temp) | |||
If jpos = WEITER_WEG Then Jsbilder.Label2.Caption = "WEITER_WEG " + CStr(temp) | |||
If jpos = WEITER_HIN Then Jsbilder.Label2.Caption = "WEITER_HIN " + CStr(temp) | |||
End If | |||
CheckInput = jpos | |||
End Function | |||
Public Sub DInput_ControlPanel() | |||
'öffne Systemsteuerung | |||
DI.RunControlPanel Jsbilder.hWnd | |||
End Sub | |||
Public Sub DInput_Kill() | |||
Dim i As Single | |||
If Jsbilder.List2.ListCount > 0 Then | |||
For i = 1 To Jsbilder.List2.ListCount | |||
Set diJoystick(i) = Nothing | |||
Next i | |||
End If | |||
Set DI = Nothing | |||
Set DX = Nothing | |||
End Sub</nowiki> | |||
<nowiki> Type=Exe | <nowiki> Type=Exe | ||