# Abspielen in Winamp



## Daywalker1984 (16. Februar 2002)

So...das is mein Proggi bis jetzt
http://daywalker1984.covers.de/screen.jpg
und nu möchte ich das wenn man auf apsielen klickt (das fenster drüber heißt Dir) es in Winamp oder sonst einem Player abgespielt wird und wenn man auf den Button drüber klickt (Enqueue) das das Lied der Liste in Winamp hinzugefügt wird.
Also im Prinzip so wie im Windows wenn man rechtsklick auf die Lieder macht und es dann öffnet oder ind Winamp hinzufügt.

Ich hoffe mir kann jemand helfen.

Danke Daywalker


----------



## netzbazille (16. Februar 2002)

Für Winamp:

Abspielen
C:\path\to\winamp\winamp.exe C:\mp3\file.mp3

Enqueue
C:\path\to\winamp\winamp.exe /ADD C:\mp3\whatever.mp3

(... von der Winamp SDK - Seite)

Weitere Winamp-Steuerungen:
http://www.winamp.com/nsdn/winamp2x/dev/sdk/api.jhtml

Gruß


----------



## Daywalker1984 (16. Februar 2002)

wow danke....
jetzt muss ich es nur noch blicken.
Könnte mir vielleicht netterweise jemand sagen wie ich das in meinen Buttonclick reinschreiben muss????

Danke


----------



## netzbazille (16. Februar 2002)

Probiers mal über die SHELL-Funktion in VB.

hApp = SHELL (Pfad, vbNormalFocus)

Gruß


----------



## K-DOG (17. Februar 2002)

hi,
mit shell geht das das wurde richtig gesagt :
SHELL (C:\path\to\winamp\winamp.exe C:\mp3\file.mp3, vbNormalFocus) 
müsste gehen habe hier kein vb drauf.
aber wenn du in der msdn nach shell suchst wirst schon das richtige finden.
mfg


----------



## Daywalker1984 (18. Februar 2002)

So habe ich es jetzt geschrieben, aber da kommt immer so ein fehler wegen dem : und dem \.

Private Sub Play_Click()

    hApp = Shell(Pfad, vbNormalFocus)

    Shell (C:\Programme\Winamp\winnamp.exe C:\mp3\file.mp3, vbNormalFocus)

End Sub

Was kann ich da tun??

Danke


----------



## VBnewbie (26. Februar 2002)

Setz einfach die Pfade der Winamp.exe und des mp3-files in Anführungsstriche ,zum Beispiel

...=shell("c:\winamp\winamp.exe c:\lieder\lied.mp3", vbNormalFocus)
bei mir hats so gefunzt.


Allerdings ergibt sich mir die Frage was passiert wenn die mp3-Datei Leerzeichen besitzt.  Da nun jedes durch Leerzeichen abgetrenntes Wort der Datei als eigene Datei geöffnet wird. Das kann natürlich nicht gehen.
Hab aber auch kein Bock noch ne Funktion zu schreiben die die Leerzeichen raushaut.

Wer weiss da Rat ???   Please


----------



## Celvin (28. Februar 2002)

Die interne Shell() Funktion von VB iss net sehr sinnvoll. Um Programme mit den verknüpften Anwendungen zu starten,benutzt man die ShellExecute() API - Funkion.


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

ShellExecute 0,"open","c:\datei\lied.mp3",vbNullString,"c:\datei\",5


----------



## netzbazille (28. Februar 2002)

@Celvin
Ist schon richtig. Allerdings fehlt dann die Möglichkeit zwischen 'Abspielen' und 'Anfügen' zu unterscheiden, da bei der ShellExecute-Funktion immer die Standard-Methode verwendet wird. (Bei den meisten wahrscheinlich 'Abspielen' - wie im Kontextmenü der fette Eintrag)

@VBnewbie
vielleicht ist es bei Leerzeichen im Liednamen sinnvoller erst eine temporäre Playlist zu bilden und diese dann mit Winamp zu öffnen - nur so eine Idee. (oder über irgendwelche API-Funktionen den 8.3 Namen der Datei herausfinden - geht bestimmt  )

Gruß


----------



## Celvin (1. März 2002)

Gut, datt mit dem Hinzufügen mag sein...
aber wer will das schon? 

Und die API-Funktion für 8.3 Namen heißt
"GetShortPathName"

Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long


----------



## VBnewbie (3. März 2002)

DANKE für die vielen Vorschläge. 

Das mit der Erstellung einer temporären Playlist hat nicht geklappt, da eine vonWinamp erstellte Playlist sowas wie:  

#EXTM3U
#EXTINF:239,Gigi D'Agostino - L'Amour Toujours (Radio Edit)
C:\WINDOWS\Desktop\Gigi D'Agostino - L'Amour Toujours (Radio Edit).mp3
#EXTINF:243,Jay Z - Hard Knock Life
C:\WINDOWS\Desktop\Jay-Z - Hard Knock Life.mp3

->erkenne keinen Sinn dahinter.
Egal, mit Shellexecute() funzt es und mehr als abspielen möchte ich ja erstma nich.
Aber das mit den kurzen Dateinamen würde mich dann doch interessieren ;-) , allerdings reicht mein Englisch scheinbar nicht aus um zu kapieren was ich laut (eigentlich "deutscher") MSDN-Hilfe in die Klammer zum ausführen der GetShortPathName schreiben muss.   
 
Wenn einer Zeit und Lust hätte mir Noob das klar zu machen ?... ;-)


----------



## Celvin (4. März 2002)

Zu allererst mal ein wichtiger Hinweis, wenn Buffer an ne API übergeben werden sollen: Es ist immer zuerst Speicher zu allozieren für die Funktion! Die simple Deklaration reicht nicht aus!

Die GetShortPathName() Funktion erwartet z.B. nen Buffer, indem sie den Pfadnamen ablegen kann. Ungefähr so:

Dim SPName As String
SPName = String$(256,Chr$(0))

GetShortPathName "C:\Programme\Elend langer Ordnername\noch son Unterordner\",SPName,256

Wichtig ist dabei, das SPName zuerst mit String$ gefüllt wird, damit auch wirklich Speicher vorhanden ist...

Existiert der Pfad nicht, ist der Rückgabewert von GetShortPathName() gleich 0, und GetLastError() gibt 2 zurück: "Das System kann die angegebene Datei nicht finden."

If GetShortPathName(blabla) = 0 then
if Err.Lastdllerror = 2 then
'Pfad net gefunden
End if
end if


----------



## Celvin (4. März 2002)

Achja, und das M3U - Format iss net wirklich so der Knaller:

#EXTM3U
#EXTINF:546,Arj Snoek - Optische Täuschung
C:\MP3s\Arj Snoek\arj_snoek - optische_täuschung.mp3

#EXTINF bezeichnet zunächst die Länge des Liedes in Sekunden, danach folgt getrennt von einem Komme der Eintrag in der Playlist. Eine Zeile darauf folgt die Position der Datei. Man kann hier auch relative Pfade zur Playlist angeben, aber ich vertraue doch auf absolute


----------



## VBnewbie (5. März 2002)

@Celvin
Ob du's glaubst oder nicht , dieses Sytem in der Playlist hab ich auch schon erahnt -is ja auch nich wirklich unlösbar *g*-
allerdings hab ich mich davon beeinflussen lassen, dass eine per Winamp erzeugte  *.pls - Datei nicht mehr funktionierte als ich ein paar Zeilen mit dem Editor daraus löschte. Hab deshalb gedacht da isn Haken.

Genug der Ausreden  : Wenn ich die Playlist per VB erzeuge, kann ich zwar damit Winamp starten aber das/die Lied(er) darin werden nicht gespielt.

Wenn du dafür noch ne Lösung hättest.... 

Ach ja DANKE nochmal für die genauere Erklärung der "GetShortPathName"
funzt wunderbar!!!


----------



## Celvin (5. März 2002)

Joa weird...also wenn ich ne .m3u starte, spielt der die auch ab.

Naja, egal...Winamp kannst du mit folgendem Befehl zum Abspielen bewegen:

SendMessage hWinAmpWin,WM_COMMAND,40045,ByVal 0

Wobei hWinAmpWin das Handle (HWND) des Winamp-Hauptfensters iss...das bekommste z.B. mit FindWindow(Klassenname: "Winamp v1.x")

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_COMMAND = &H111

Dim hWinAmpWin As Long
hWinAmpWin = FindWindow("Winamp v1.x",vbNullString)

SendMessage hWinAmpWin,WM_COMMAND,40045,ByVal 0


----------



## Daniel Toplak (5. März 2002)

Also ich hab das auch mal ausprobiert und das mit den Playlisten geht ganz einfach ich hab dazu nicht extra ein Programm geschrieben sonder nur einfach mit dem EDITOR von Windows eine Datei erstellt mit der endung .m3u in dieser Datei stehen einfach die Pfade drin und zwar die absoluten:
z.B.:

c:\lieder\meine\rock und so ein zeugs\blabla1 oder so.mp3
c:\lieder\meine\rock und so ein zeugs\blabla2 oder so.mp3
c:\lieder\meine\rock und so ein zeugs\blabla3 oder so.mp3
c:\lieder\meine\rock und so ein zeugs\blabla4 oder so.mp3
c:\lieder\meine\rock und so ein zeugs\blabla5 oder so.mp3
c:\lieder\meine\rock und so ein zeugs\blabla6 oder so.mp3
c:\lieder\meine\rock und so ein zeugs\blabla7 oder so.mp3

und das geht dann wenn ich auf die Datei klicke. Also wenn du mit deinem Programm eine Datei erstellst dann geht das sicherlich auch. Und du dann Winamp mit eben dieser erstellten Playliste startest. Da musst du dich nicht einmal mehr mit kurzen 8.3 Dateinamen rumärgern.

Gruss Homer


----------

