Interpret, Album,... in Winamp auslesen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Infinity.

    Interpret, Album,... in Winamp auslesen

    Hey Forum

    Wie im Titel steht suche ich eine Möglichkeit den Interpreten,Album und so in Winamp auslesen, und zwar vom aktuellen Song.

    Fernsteuern,Titel,Songlänge und Aktuelle Position hab ich hin bekommen. Mit Hilfe dieses Links
    Eine Möglichkeit wäre, den Pfad des aktuellen Songs auslesen und danach die ID3 Tags direkt auslesen. Nur wie kann ich den Pfad des Traks auslesen?

    Hoffe mir kann jemand helfen, und Danke im vorraus.

    mfg Ebrithil
    Das kannst du per Write/ReadProcessMemory machen.
    Ich hatte da mal was in C# geschrieben:

    Quellcode

    1. public string GetWinampSongPath(){
    2. byte[] buffer = new byte[MAX_PATH];
    3. int outr = 0;
    4. Native.ReadProcessMemory(WinampHandle, (IntPtr)0x004BCAF8, buffer, MAX_PATH, out outr);
    5. return System.Text.RegularExpressions.Regex.Split(Encoding.Unicode.GetString(buffer), "\0")[0];
    6. }

    Ab dann würde ich nurnoch mit ID3 Librarys die Daten auslesen, da das Auslesen des Interprets oder des Albums, oft "Fehlerhaft" ist.
    Damit meine ich, du musst per SendMessage übergeben, welchen Titel du in der Playlist auslesen willst. Oft braucht Winamp aber 30-100msecs um eben alle Ergebnisse zu speichern.
    Wenn du die Tags davor ausließt, bekommst du den Wert zurück, der vorher schon gebuffert war. Suboptimal. Sowas bekommt man dann am ende nur intern als Plugin hin.
    Die Function GetWinampSongPath returnt den Pfad des gerade Spielenden tracks.

    Es kann sein, dass die Addresse von deinem Winamp unterscheidet. Ich hab die neueste Version.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Tsuyo“ ()

    developerfusion.com/tools/convert/csharp-to-vb/

    VB.NET-Quellcode

    1. Public Function GetWinampSongPath() As String
    2. Dim buffer As Byte() = New Byte(MAX_PATH - 1) {}
    3. Dim outr As Integer = 0
    4. Native.ReadProcessMemory(WinampHandle, DirectCast(&H4bcaf8, IntPtr), buffer, MAX_PATH, outr)
    5. Return System.Text.RegularExpressions.Regex.Split(Encoding.Unicode.GetString(buffer), vbNullChar)(0)
    6. End Function


    ReadProcessMemory ist eine WinAPI funktion, die findest du auf PInvoke.net, MAX_PATH ist eine Variable= 255
    k danke, was ich aber nicht verstehe ist Warum oben steht, also im C# Code:

    Quellcode

    1. new byte[MAX_PATH];

    Unt im VB Code:

    VB.NET-Quellcode

    1. New Byte(MAX_PATH - 1) {}


    Warum hat es im VB Pfad ein -1?Kenn mich mit C# gar nicht aus aber das erscheint mir nicht logisch :D

    mfg Ebrithil
    In VB.NET ist das Definieren von Array anders als in C#, deshalb die -1:

    In VB bedeutet

    VB.NET-Quellcode

    1. Dim Bsp(24) As Integer

    dass ein Array vom Type Integer definiert wird, dessen Indizes von 0 bis 24 reichen.

    In C# bedeutet

    VB.NET-Quellcode

    1. int[] Bsp = new int[24];

    dass ein Arry vom Type Integer definiert wird, mit 24 Elementen.