Code-Beispiel
Winamp per Gamepad/Joystick steuern
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | grindstone | 30.01.2013 |
#Include "windows.bi"
Dim As Single jx, jy, x, wartezeit
Dim As Integer knopf, knopfvor, tknopf
Dim As LongInt zeitvor, tracklen
Dim As HWND hWndWinamp, hWndDiesesFenster
hwndDiesesFenster = GetForegroundWindow()
'das Programm darf nur einmal laufen, da sich sonst die verschiedenen Instanzen gegenseitig stören
SetWindowText(hwndDiesesFenster,"WinampGamepadNew")
If FindWindow(0,"WinampGamepad") Then 'feststellen, ob Programm schon läuft
End 'schon eine Instanz gestartet, Programm beenden
Else 'Programm starten
SetWindowText(hwndDiesesFenster,"WinampGamepad")
ShowWindow(hwndDiesesFenster,0)
EndIf
'Parameter für "ShowWindow":
'0 ' Versteckt das Fenster
'1 ' Aktiviert das Fenster
'2 ' Zeigt das Fenster an und Minimiert es
'3 ' Maximiert das Fenster
'4 ' Zeigt das Fenster an ohne es zu aktivieren
'5 ' Zeigt das Fenster an, auch wenn es versteckt ist
'6 ' Minmiert das Fenster
'7 ' Minimiert das Fenster aber aktiviert es nicht
'8 ' Zeigt das Fenster an aber aktiviert es nicht
'9 ' Stellt das Fenster wieder her
wartezeit = 0
Do 'Endlosschleife zur Gamepad-/Joystickabfrage
If GetJoystick (0, knopf, jx, jy) Then
'kein Gamepad/Joystick angeschlossen
Sleep 10000, 1 'alle 10 Sekunden prüfen
Else 'Gamepad/Joystick vorhanden
hwndWinamp = FindWindow("Winamp v1.x",0) 'Fensterhandle von Winamp ermitteln. Diese
' Funktion wird bei jedem Schleifendurchlauf aufgerufen, damit ist sichergestellt, daß bei
' mehreren gestarteten Winampinstanzen immer die gerade aktive Instanz angesprochen wird
If knopf Then 'Knopf gedrückt
If knopf = 5 Then 'Knöpfe 1 und 3 gleichzeitig gedrückt --> GamepadWinamp beenden
'Da das Programm weder ein sichtbares Fenster hat noch in der Taskleiste auftaucht, kann
'es von Windows aus nur beendet werden, indem man es im Taskamager abschießt. Darum gibt
'es hier die Möglichkeit, das Programm zu beenden, indem man die Knöpfe 1 und 3 (lauter
'und leiser) 2 Sekunden lang gleichzeitig gedrückt hält.
Sleep 2000 '2 Sekunden warten
GetJoystick (0, knopf, jx, jy) 'Gamepad/Joystick erneut abfragen
If knopf = 5 Then 'Knöpfe 1 und 3 sind immer noch gedrückt
Select Case MessageBox(hwndDiesesFenster,"Programm beenden?","WinampGamepad",MB_YESNO)
Case 6 'Ja --> Programm beenden
End
End Select
EndIf
ElseIf knopf And 1 Then 'Knopf 1
SendMessage(hWndWinamp,WM_COMMAND,40058,0) 'Winamp 1% lauter
If knopfvor Then 'Die Variable "knopfvor" ist <> 0, wenn der Knopf seit dem letzten
' Schleifendurchlauf nicht losgelassen wurde
wartezeit = 50 'Wartezeit bei gehaltenem Knopf
Else
wartezeit = 150 'Wartezeit nach erstem Knopfdruck
EndIf
ElseIf knopf And 2 Then 'Knopf 2
If knopfvor Then 'bei gehaltenem Knopf
zeitvor = SendMessage(hWndWinamp,WM_USER,0,105) 'aktuelle Position ermitteln
SendMessage(hWndWinamp,WM_USER,zeitvor + 1000,106) 'Winamp 1 Sekunde vor
wartezeit = 15
Else 'bei erstem Knopfdruck
SendMessage(hWndWinamp,WM_COMMAND,40148,0) 'Winamp 5 Sekunden vor
wartezeit = 150
EndIf
ElseIf knopf And 4 Then 'Knopf 3
SendMessage(hWndWinamp,WM_COMMAND,40059,0) 'Winamp 1% leiser
If knopfvor Then
wartezeit = 50 'Wartezeit bei gehaltenem Knopf
Else
wartezeit = 150 'Wartezeit nach erstem Knopfdruck
EndIf
ElseIf knopf And 8 Then 'Knopf 4
If knopfvor Then
zeitvor = SendMessage(hWndWinamp,WM_USER,0,105) 'aktuelle Position ermitteln
zeitvor -= 1000 'Winamp eine Sekunde zurück
If zeitvor > 0 Then
SendMessage(hWndWinamp,WM_USER,zeitvor,106) 'eine Sekunde zurück
Else 'Trackanfang erreicht --> 1 Track zurück
SendMessage(hWndWinamp,WM_COMMAND,40044,0) '1 Track zurück
tracklen = SendMessage(hWndWinamp,WM_USER,1,105) * 1000 'Tracklänge in Milli-
' sekunden
SendMessage(hWndWinamp,WM_USER,tracklen - 1000,106) 'Position auf 1 Sekunde vor
' Ende setzen
EndIf
wartezeit = 15
Else
SendMessage(hWndWinamp,WM_COMMAND,40144,0) 'Winamp 5 Sekunden zurück
If SendMessage(hWndWinamp,WM_USER,0 , 105) < 10 Then 'Anfang --> 1 Track zurück
SendMessage(hWndWinamp,WM_COMMAND,40044,0) '1 Track zurück
tracklen = SendMessage(hWndWinamp,WM_USER,1 , 105) * 1000 'Tracklänge in Milli-
' sekunden
SendMessage(hWndWinamp,WM_USER,tracklen - 3000 , 106) 'Position auf 3 Sekunden vor
' Ende setzen
EndIf
wartezeit = 150
EndIf
ElseIf knopf And 16 Then 'Knopf 5
SendMessage(hWndWinamp,WM_COMMAND,40048,0) 'Winamp nächster Track
If knopfvor Then
wartezeit = 30 'Wartezeit bei gehaltenem Knopf
Else
wartezeit = 200 'Wartezeit nach erstem Knopfdruck
EndIf
ElseIf knopf And 32 Then 'Knopf 6
SendMessage(hWndWinamp,WM_COMMAND,40048,0) 'Winamp nächster Track
If knopfvor Then
wartezeit = 30 'Wartezeit bei gehaltenem Knopf
Else
wartezeit = 200 'Wartezeit nach erstem Knopfdruck
EndIf
ElseIf knopf And 64 Then 'Knopf 7
SendMessage(hWndWinamp,WM_COMMAND,40044,0) 'Winamp voriger Track
If knopfvor Then
wartezeit = 30 'Wartezeit bei gehaltenem Knopf
Else
wartezeit = 200 'Wartezeit nach erstem Knopfdruck
EndIf
ElseIf knopf And 128 Then 'Knopf 8
SendMessage(hWndWinamp,WM_COMMAND,40044,0) 'Winamp voriger Track
If knopfvor Then
wartezeit = 30 'Wartezeit bei gehaltenem Knopf
Else
wartezeit = 200 'Wartezeit nach erstem Knopfdruck
EndIf
ElseIf knopf And 256 Then 'Knopf 9
SendMessage(hWndWinamp,WM_COMMAND,40045,0) 'Winamp play
ElseIf knopf And 512 Then 'Knopf 10
SendMessage(hWndWinamp,WM_COMMAND,40046,0) 'Winamp pause
wartezeit = 2000
EndIf 'Ende der Gamepad-/Joystickabfrage
'Warteschleife
'Die Funktion "GetTickCount" gibt die Anzahl der Millisekunden seit dem Systemstatart
' zurück. Dadurch ist die Länge der Warteschleife unabhängig von der Prozessor-
' geschwindigkeit. Wenn kein Knopf gedrückt ist, wird die Warteschleife sofort
' beendet.
wartezeit += GetTickCount()
Do
GetJoystick(0,tknopf,jx,jy) 'Joystick/Gamepad abfragen
Loop Until (GetTickCount() > wartezeit) Or (tknopf = 0) 'Wartezeit ist abgelaufen oder
' Knopf wurde losgelassen
Else 'kein Knopf gedrückt
Sleep 50, 1 'Pause zur Ressourcenschonung, wirkt allerdings auch als Ansprech-
' verzögerung. Der Wert von 50ms ist ein Kompromiss zwischen beiden
' Effekten
EndIf
knopfvor = knopf 'gedrückten Knopf merken
wartezeit = 0
EndIf
Loop
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|
|