Hinweis: Diese Webseite dient als Archiv und wird nicht mehr aktualisiert. Aktuelle Artikel gibt es unter http://bwir.de

Winamp mit Visual Basic ansteuern

Auslesen und Senden von Befehlen in Winamp 2.X und 5.X

 

Dieser Artikel befindet sich im Archiv und wird nicht mehr aktualisiert. Informationen können ggf. veraltet, unvollständig oder fehlerhaft sein.

Modul erstellen

Für die Winampansteuerung benötigt man ein Modul, das die nötigen Funktionen bereitstellt und auch die Befehle enthält.

  
Public Declare Function GetWindowText Lib "User32" _
    Alias "GetWindowTextA" ( _
    ByVal hwnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long _
    ) As Long
 
Public Declare Function FindWindow Lib "User32" _
    Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String _
    ) As Long
 
Public Declare Function SendMessage Lib "User32" _
    Alias "SendMessageA" ( _
    ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long _
    ) As Long
 
Public DONTCHANGEBAR As Boolean
 
Public Const WM_COMMAND As Long = &H111&
Public Const WM_USER As Long = &H400&
Public WA_hwnd As Long

Winamp initialisieren

Zuerst muss man den Winamp-Prozess initialisieren. Das funktioniert nur, wenn Winamp bereits gestartet ist.

  
WA_hwnd = FindWindow("Winamp v1.x", vbNullString)
If WA_hwnd = 0 Then
  'Befehle (z.B. Fehlermeldung), falls Winamp nicht initialisiert werden konnte
End if       
 

Winamp ansteuern

Um Winamp anzusteuern gibt es zwei Befehlsblöcke. Mit Block eins "WM_COMMAND Messages" kann man Aktionen auf dem Interface simulieren, z.B. das Klicken auf den Play-Button. Der zweite Block "WM_USER Messages" ermöglicht ein direkteres Ansteuern (z.B. die numerische Veränderung der Lautstärke) und auch das Auslesen von Parametern wie Tracklänge etc.

WM_COMMAND Messages

Für die "WM_COMMAND Messages" muss folgender Quellcode in ein Modul eingefügt werden. Funktionen, die man nicht benötigt, können weggelassen werden.

  
Public Const WA_PREV = 40044        'Previous track button
Public Const WA_NEXT = 40048        'Next track button
Public Const WA_PLAY = 40045        'Play button
Public Const WA_PAUSE = 40046       'Pause/Unpause button
Public Const WA_STOP = 40047        'Stop button
Public Const WA_FADESTOP = 40147    'Fadeout and stop
Public Const WA_STOPTRACK = 40157   'Stop after current track
Public Const WA_FFW = 40148         'Fast-forward 5 seconds
Public Const WA_FRW = 40144         'Fast-rewind 5 seconds
Public Const WA_PLSTART = 40154     'Start of playlist
Public Const WA_PLEND = 40158       'Go to end of playlist
Public Const WA_OPENFILE = 40029    'Open file dialog
Public Const WA_OPENURL = 40155     'Open URL dialog
Public Const WA_INFOBOX = 40188     'Open file info box
Public Const WA_TIMEELAPSED = 40037 'Set time display mode to elapsed
Public Const WA_TIMEREMAIN = 40038  'Set time display mode to remaining
Public Const WA_TOGGLEPREF = 40012  'Toggle preferences screen
Public Const WA_OPENVISUAL = 40190  'Open visualization options
Public Const WA_OPENVIPLUG = 40191  'Open visualization plug-in options
Public Const WA_EXECVISUAL = 40192  'Execute current visualization plug-in
Public Const WA_TOGGLEABOUT = 40041 'Toggle about box
Public Const WA_AUTOSCROLL = 40189  'Toggle title Autoscrolling
Public Const WA_TOGGLEONTOP = 40019 'Toggle always on top
Public Const WA_WNDSHADE = 40064    'Toggle Windowshade
Public Const WA_PLSWNDSHADE = 40266 'Toggle Playlist Windowshade
Public Const WA_DBLSIZE = 40165     'Toggle doublesize mode
Public Const WA_TOGGLEEQ = 40036    'Toggle EQ
Public Const WA_TOGGLEPL = 40040    'Toggle playlist editor
Public Const WA_TOGGLEMW = 40258    'Toggle main window visible
Public Const WA_MINIBROWSE = 40298  'Toggle minibrowser
Public Const WA_EASYMOVE = 40186    'Toggle easymove
Public Const WA_VOLINCR = 40058     'Raise volume by 1%
Public Const WA_VOLDECR = 40059     'Lower volume by 1%
Public Const WA_SHUFFLE = 40023     'Toggle Shuffle
Public Const WA_REPEAT = 40022      'Toggle Repeat
Public Const WA_JMPTIME = 40193     'Open jump to time dialog
Public Const WA_JMPFILE = 40194     'Open jump to file dialog
Public Const WA_SKINSELEC = 40219   'Open skin selector
Public Const WA_CONFVISUAL = 40221  'Configure current visualization plug-in
Public Const WA_RELOADSKIN = 40291  'Reload the current skin
Public Const WA_CLOSE = 40001       'Close Winamp
Public Const WA_TENTRKBACK = 40197  'Moves back 10 tracks in playlist
Public Const WA_EDBOOKMRK = 40320   'Show the edit bookmarks
Public Const WA_BOOKMRKTRK = 40321  'Adds current track as a bookmark
Public Const WA_AUDIOCD = 40323     'Play audio CD
Public Const WA_LOADEQ = 40253      'Load a preset from EQ
Public Const WA_SAVEEQ = 40254      'Save a preset to EQF
Public Const WA_LOADPRESETS = 40172 'Opens load presets dialog
Public Const WA_AUTOLDPRSTS = 40173 'Opens auto-load presets dialog
Public Const WA_LOADDEFPRST = 40174 'Load default preset
Public Const WA_SAVEPRESET = 40175  'Opens save preset dialog
Public Const WA_AUTOLDSAVE = 40176  'Opens auto-load save preset
Public Const WA_DELPRESET = 40178   'Opens delete preset dialog
Public Const WA_DELAUTOLD = 40180   'Opens delete an auto load preset dialog

Zum Ausführen eines der im Modul deklarierten Befehle verwendet man:

  
SendMessage WA_hwnd, WM_COMMAND, <Befehl>, 0
 

Um Repeat an/auszuschalten benötigt man also den Befehl

  
SendMessage WA_hwnd, WM_COMMAND, WA_REPEAT, 0
 

WM_USER Messages

Möchte man diese Befehle ebenfalls mit Namen ansprechen, verwendet man:

 Public Const <Name> = <Befehlsnummer>

Ansonsten gibt man den Befehl direkt als Nummer an. Hier eine Übersicht über die wichtigsten Befehle:

  
0	'Auslesen der Winampversion - damit kann man gut feststellen, dass Winamp läuft
100 	'Startet die Wiedergabe. Ähnlich wie "Play" aber nicht das selbe
101 	'Playlist löschen
102 	'Ausgewählten Track abspielen
103 	'Winamp zum Verzeichnis C:\Download wechseln
104 	'Abspielstatus. Bei Wiedergabe wird 1 zurückgegeben, bei Pause 3. 
	'Ansonsten ist die Wiedergabe gestoppt.
105 	'Mit Parameter 0 wird die Wiedergabeposition in ms zurückgegeben, bei Parameter 1
        'die aktuelle Track-Länge in Sekunden. Bei keiner Wiedergabe oder einem Fehler 
        'wird -1 zurückgegeben.
106 	'Springt zur im Parameter in ms angegebenen Trackposition
120 	'Schreibt die aktuelle Playlist ins Winampverzeichnis (winamp.m3u) 
	'und gibt die aktuelle Playlistposition zurück
121 	'Springt zum im Parameter angegebenen Track. Beginnt bei 0, Parameter=Tracknr-1 ruft 
	'also den korrekten Track auf 
122 	'Mit dem Parameter kann man die Lautstärke von 0-255 einstellen. Verwendet man als
        'Parameter -666 wird die aktuell eingestellte Lautstärke zurückgegeben.
123 	'Mit dem Parameter kann man die Balance von 0 (links) bis 255 (rechts) eingeben
124 	'Gibt Anzahl der Tracks in der aktuellen Playlist aus
125 	'Gibt die aktuell abgespielte Tracknummer der Playlist aus (ab Winamp 2.05).
126 	'Gibt bei Parameter 0 die Samplerate, bei 1 die Bitrate und bei 2 
	'die Anzahl der Channel zurück (ab Winamp 2.0.5).
127 	'Liest die Equalizer-Einstellungen aus. Parameter 0-9 gibt die Einstellung der 
	'Kanäle von 1-10 zurück (0-63, +20db - -20db). Parameter 10 gibt die 
	'Vorverstärker-Einstellung zurück (0-63, +20db - -20db), Parameter 11 gibt 0 zurück, 
	'wenn der Equalizer deaktiviert ist - ansonsten ungleich 0.
128 	'Autoload. Will return zero if disabled, nonzero if enabled. 
	'To set an element of equalizer data, simply query which item you wish to set using the
	'message above (127), then call this message with data
129 	'Fügt die ausgewählte Datei der Winamp Bookmarkliste hinzu
135 	'Startet Winamp neu
 

Zum Ausführen der im Modul deklarierten Befehle verwendet man:

  
SendMessage WA_hwnd, WM_USER, <Parameter>, <Befehl>
 

Das Stellen der Lautstärke auf 100 geht also so:

  
SendMessage WA_hwnd, WM_USER, 100, 122
 

Das Auslesen eines Werts (hier: Länge des Tracks) geht folgendermaßen:

  
Tracklaenge = SendMessage(WA_hwnd, WM_USER, 1, 105)
 

Benötigt ein Befehl kein Parameter, verwendet man einfach eine 0.

Beispielprogramm

Ein kleines Programm, das die oben erwähnten Funktionen an einfachen Beispielen verdeutlicht.

Screenshot

Screenshot des Beispielprogramms

12 Kommentare RSS Feed

Othmar am 11.12.2009 um 13:49 Uhr E-Mail-Adresse

Hallo,
Winamp initialisiert habe ich mit
SHELL_ ("C:ProgrammeWinampWinamp.exe")
Alles funktioniert bestens, doch hätte ich ein Frage?
Wie kann ich einen MP3-File abspielen, dessen Filename sammt Pfad in einer Vatiablen steht?
z.B: SpielFile = "C:MeineMP3_ Test1.mp3"

Für eine Antwor bin ich sehr dankbar!!!

Gruß Othmar

roman am 03.12.2008 um 18:16 Uhr E-Mail-Adresse

hallo erstamls

hab ein problem mit dem befehl playlist exporieren (120)
möchte gerne die playlist schreben lassen und dann in ein listview einfügen
jedocdh funktioniert das nicht
benutze diesen befehl
SendMessage WA_hwnd, WM_USER, 0, 120

c.Baer am 29.03.2008 um 18:25 Uhr E-Mail-Adresse

Hi,
wie bekomme ich mit VB Winamp dazu eine ganz bestimmte datei z.B. eine Playlist abzusppielen?

Bernie am 18.12.2007 um 17:31 Uhr

Ronny:
Soviel ich weiß, geht das auslesen der kompletten Playlistzeit leider nicht, denn auch im Winamp werden unter der Playlist nur die Zeiten der Titel addiert, die bereits abgespielt bzw. angezeigt wurden, du müsstest also durch alle Titel springen und dir die einzelnen Zeiten übergeben lassen...

Movergan:
Mit Befehl 120 kannst du die aktuelle Playlist ausgeben lassen und dir mit Befehl &H400 die Titelnummer sagen lassen, dann einfach die Datei öffnen und den Eintrag auswerten...

Dudu:
Am besten baust du einen Timer in dein Programm ein, der alle halbe Sekunden sowohl die aktuelle Zeit abfrägt und stellst diese dar (eine Picturebox eignet sich dazu aber überhaupt nicht!)

Hoff, konnte ein bisschen helfen, auch wenn die Kommentare schon älter sind!

Martin am 12.03.2007 um 15:06 Uhr E-Mail-Adresse

Frage: hat dasselbe schonmal jemand in OpenOffice (StarBasic) versucht?
Das Starten von WinAmp hat bei mir prima geklappt, allerdings ist es mir bisher nicht gelungen, Werte vom WinAmp zurück in meine Makros zu bekommen (z.B. die Wiedergabeposition (Befehl 105)).

Für Anregungen wäre ich dankbar.

Martin

Alle Kommentare lesen

Kommentar verfassen

Name:
E-Mail:
Optional - wird vor Spam geschützt
Kommentar:
HTML-Code ist nicht möglich
Tipp: Abonnieren Sie diese Kommentare als RSS-Feed, um über neue Einträge auf dem Laufenden zu sein.