Seite 1 von 1

Winamp Playliste auslesen (Erledigt)

Verfasst: 24.02.2014 18:58
von enigma
Hallo,
ich versuche mit PureBasic die Winamp-Playlist auszulesen. Bei meiner Suche habe ich folgendes gefunden:

Code: Alles auswählen

Procedure Winamp_GetPlaylistTitle()                 
  LastPlayListTitle = PeekS(SendMessage_(hWndWinamp, #WM_USER, (PlLength-1), #WINAMP_IPC_GETPLAYLISTTITLE))
  ProcedureReturn 
EndProcedure
Allerdings bekomme ich nur ein unleserliches Zeichen zurück.
Wenn ich SendMessage_ ohne PeekS aufrufe

Code: Alles auswählen

LastPlayListTitle = SendMessage_(hWndWinamp, #WM_USER, (PlLength-1), #WINAMP_IPC_GETPLAYLISTTITLE)
bekomme ich eine mehrstellige Zahl zurück die mir auch nicht weiter hilft.

Was mache ich falsch???
Hat jemand einen Tip für mich?

Gruß Enigma

Re: Winamp Playliste auslesen

Verfasst: 24.02.2014 21:30
von Derren
Warum postest du keinen lauffähigen Code?

Ich find nicht mal das Winamp Fenster. Hab mit ShoWin den Titel ausgelesen, und FindWindow_() gibt trotzdem null zurück.
Den Wert der Konstante hab ich mir auch ergoogeln müssen.

Und ein Link zu dem ursprünglichen Code den du als Vorlage verwendest wär vielleicht auch nett.


edit: So, hab es jetzt soweit, bekomme aber immer einen IMA oder einen leeren String.

Code: Alles auswählen

EnableExplicit

Define hWndWinamp = FindWindow_("Winamp v1.x",#Null)

#WINAMP_IPC_GETPLAYLISTTITLE = 212

Procedure Winamp_GetPlaylistTitle(hWnd, playListEntry)        
	Protected result.i
	
	result = SendMessage_(hWnd, #WM_USER, playListEntry, #WINAMP_IPC_GETPLAYLISTTITLE)
	
	Debug result ;immer konstant, auch wenn man dne Playlisteintrag verändert
	
	If result				
		Debug MemoryStringLength(result) ;Sogar hier schon ein IMA		
		Debug ">>"+PeekS(result)+"<<" ;IMA
		
	EndIf
	
EndProcedure

Winamp_GetPlaylistTitle(hWndWinamp, 10)

Re: Winamp Playliste auslesen

Verfasst: 24.02.2014 22:13
von - chris -

Code: Alles auswählen


;http://forums.winamp.com/showthread.php?threadid=180297
;http://www.entwickler-ecke.de/topic_wie+kann+man+die+Playlist+von+Winamp+einlesen_48816,0.html

#IPC_GETLISTLENGTH           = 124
#WINAMP_IPC_GETPLAYLISTTITLE = 212

*buffer = AllocateMemory(1024)
If *buffer = 0
  End
EndIf

hWndWinamp = FindWindow_("Winamp v1.x", 0)

If hWndWinamp

  ListLength = SendMessage_(hWndWinamp, #WM_USER, 0, #IPC_GETLISTLENGTH)
  Debug ListLength

  BaseAdress = SendMessage_(hWndWinamp, #WM_USER, 0, #WINAMP_IPC_GETPLAYLISTTITLE)
  Debug BaseAdress

  GetWindowThreadProcessId_(hwndWinamp, @ProcessId)
  Debug ProcessId

  hProcess = OpenProcess_(#PROCESS_ALL_ACCESS, #False, ProcessId)
  Debug hProcess

  ReadProcessMemory_(hProcess, BaseAdress, *buffer, 1024, @NumberOfBytesRead)
  Debug NumberOfBytesRead
  Debug PeekS(*buffer, -1, #PB_Ascii)

  CloseHandle_(hProcess)

EndIf


Re: Winamp Playliste auslesen

Verfasst: 24.02.2014 22:30
von enigma
@ - chris -

besten Dank für deine schnelle Antwort. Genau das habe ich gesucht. :allright:
Jetzt muss ich es nur noch verstehen. :roll: Werde mir dazu mal deine Links ansehen.

@ Derren

auch dir vielen Dank für deine Mühe.

Gruß
Enigma

Re: Winamp Playliste auslesen (Erledigt)

Verfasst: 25.02.2014 19:38
von Sicro
- chris - hat geschrieben:

Code: Alles auswählen

[...]hProcess = OpenProcess_(#PROCESS_ALL_ACCESS, #False, ProcessId)
Alle Rechte sind nicht erforderlich, #PROCESS_VM_READ reicht.

Re: Winamp Playliste auslesen (Erledigt)

Verfasst: 26.02.2014 14:57
von enigma
@Sicro

Danke, getestet und für gut befunden :mrgreen: aber was bringt mir das? Geschwindigkeit? Speicher? ...?

Danke für eine Info

Gruß
Enigma

Re: Winamp Playliste auslesen (Erledigt)

Verfasst: 26.02.2014 16:14
von NicTheQuick
Das bringt dir so einiges. Virenscanner meckern nicht oder weniger. Man braucht eventuell keine Adminrechte. Du musst immer auch andere Windows-Systeme in Betracht ziehen.

Re: Winamp Playliste auslesen (Erledigt)

Verfasst: 26.02.2014 18:07
von enigma
Aha

Besten Dank
Enigma