Entwickler-Ecke

Windows API - [Winamp] Songtitel auslesen


caty - Mo 09.12.02 16:04
Titel: [Winamp] Songtitel auslesen
Hallo Leute

Ich hab die Suchfunktion benutzt, und leider nichts gefunden, vielleicht könnt ihr mir helfen. Ich brauch für ein Terminalprogramm den Songtitel des akutell in Winamp gespielten Lied..

Ich hab folgendes gefunden:


Quelltext
1:
2:
3:
winamp(wm_user,Data,Function,Result)

212 : Retrieves (and returns a pointer in 'ret') a string that contains the title of a playlist entry (indexed by 'data'). Returns NULL if error, or if 'data' is out of range.


Mhm, jetzt weiss ich leider nicht sehr viel über Pointer. Also der Rückgabewert ist ein 5stellige Integer-Wert. Wie bekomm ich jetzt den Namen davon.

Tut mir echt leid wenns eine Anfängerfrage ist


DaFox - Di 10.12.02 01:10

Hi!

Zitat:

Here is a list of the currently supported ids that you can only use from within Winamp plug-ins (since they depend on running in the same process as Winamp):

(http://www.winamp.com/nsdn/winamp2x/dev/sdk/api.jhtml)


Dieser Text steht über dem, den Du gepostet hast und heißt soviel wie, dass diese Funktionen nur Plug-Ins zur Verfügung steht.

Allerdings:

Zitat:

since they depend on running in the same process as Winamp


Es ruft also mal wieder der Giftschrank! :lol:

Gruß,
Markus


matze - Di 10.12.02 17:41

auf der seite http://www.stnd.de/ gibt es super winamp tutorials + eine kompo die dir das ganze API zugs abnimmt !!! einfach im menü den punkt Programming anklicken !


caty - Di 10.12.02 18:00

Hoi Leute, also des bringt mich alles ned wirklich weiter, da ich leider kein Plugin machen darf (muss ein Standanloneapp sein)

Aber ich hab mich mal durch die API Funktionen durchgewurschtelt und ich habs geschaftt. Sollte also jemand das gleiche vorhaben wie ich macht er es bitte so:




Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function GetWinampFilename(data:Integer): String;
var Text, tempStr: String;
    hwndWinamp, TempHandle : THandle;
    dat2: array[0..500] of Char;
    TrackPos: Integer;
    temp, MPointer: Cardinal;
begin
  hwndWinamp:= FindWindow('Winamp v1.x',nil);
  if data<0 then TrackPos:= SendMessage(hwndWinamp,WM_USER,0 , 125) else TrackPos:=data;
  MPointer:= SendMessage(hwndWinamp,WM_USER,TrackPos , 212);
  GetWindowThreadProcessId(hwndWinamp,TempHandle);
  hwndWinamp:= OpenProcess(PROCESS_ALL_ACCESS,False,TempHandle);
  ReadProcessMemory(hwndWinamp, Pointer(MPointer), @dat2,500,temp);
  CloseHandle(hwndWinamp);
  tempStr:= dat2;  // ;-)
  Result:= tempStr;
end;


Mit GetWinampFilename(XX) holt er sich den Titel des XXten Lieds mit GetWinampFilename(-1) den des aktuell gespielten Liedes...

Cya[/b]


Luckie - Di 10.12.02 18:12

Man solle noch ein paar Sicherheitsbafragen einbauen und den Rückgabe wert würde ich nach String casten:
tempStr:= String(dat2);
Warum machst du es eigentlich nicht so:
result := String(dat2);
Dann sparst du dor eine Varibale.