Winamp über c++ anteuern



  • Aso der name rührt daher, da ich allmählich das kotzen kriege ^^
    da ich schon ne menge gesurft habe ^^
    die SDK von winamp komplett durchgeguckt habe...
    Das Forum von Winamp durchgeguckt habe und das was ich nicht verstanden habe mir nach und nach übersetzt habe...
    und mometan einfach KP habe was ich falsch mache ^^

    dabei dacht ich es geht so einfach: Handle mit winamp & dann die Funktionen einfach zuweisen... was angeblich bei der 2er version auch gehen soll



  • vergiss das ding ausm netz... sin vielleicht irgendwelche versionskonflikte

    also wenns fehlerfrei übersetzt is es vielleicht in ordnung, nur du installierst es falsch

    was schreibst du denn genau?
    ein plugin?
    hast dus dann auch in den pluginordner kopiert und in den winamp einstellungen als aktives plugin ausgewählt?



  • Also zu aller erst wollte ich einfach einen Button bei C++ machen, der dann wenn ich drauf drücke die Play Taste aktiviert !
    müßte doch gehen... 😕



  • Hmmm... 🙄
    Kann man Winamp denn nun von Extern steuern ?
    Oder muß man es über nen Plugin machen ?



  • Winamp.com schrieb:

    Winamp Software Development Kit Released
    2004.02.26
    In this section of NSDN, we show you how to access Winamp's functionality through external applications. If any of you wanted to build a can opener that ran Winamp, you would need the information provided here. API functions and other code snippets are available in the C/C++ programming language. Needless to say, a programming background is helpful. We strongly suggest joining the Winamp Plug-in Discussion List for all levels of Winamp development. A better support community simply does not exist.

    also laut der beschreibung sollte es gehn
    ich hab das sdk halt noch nie benutzt... die ursprüngliche frage drehte sich ja eher um vc/borland probleme



  • Also der Minimalfall wäre folgender:

    Du gibst bei der Verknüpfung zu Winamp den zusätzlichen Parameter /class="DEINNAME" an.

    Dann bekommst du das hwnd von Winamp so:

    HWND hwnd=FindWindow("DEINNAME",NULL);
    

    Und das Abspielen sollte dann so funktionieren:

    SendMessage(hwnd,WM_WA_IPC,0,102);
    

    102 ist hier der Code für "Play".
    Du darfst nartürlich nicht vergessen die "winamp.h" aus dem SDK zu inkludieren.

    mfg



  • thx 🙂
    das hier hatte ich ja schon Probiert...

    HANDLE hwnd_winamp;
      hwnd_winamp = FindWindow("winamp 1.x",NULL);
    
      //nur dies hate ich wie auf der vorherigen Seite
      SendMessage(hwnd_winamp,WM_WA_IPC,0,102);
    

    Nur soll das nur bei der 2 er Version gehen... benutze ja die 5er!

    Und hab daher da noch nichts zu stande gebracht ^^ Habe die Headers auch eingebunden (sonst meckert der ja eh)

    Gut Büffel die SDK noch mal nen wenig weiter...
    Kennt jemand nen Winamp Tutorial ?
    (Am besten in deutsch ^^ 😉 )



  • Hier das hab ich vorweg auch verwendet...
    Dachte nur man kann auch "IPC_STARTPLAY" anstelle der 102 einsetzen ^^

    #define IPC_STARTPLAY 102   // starts playback. almost like hitting play in Winamp.
    #define IPC_STARTPLAY_INT 1102 // used internally, don't bother using it (won't be any fun)
    

    ist bei mir die Datei wa_ipc.h



  • Ahso thx erstmal für eure mühe 🙂 ^^ hat man als registrieter user nen Edit Button ?
    dann würde ich mcih mal regen^^



  • jo den bekommste gratis dazu wenn du dich reggst 😉



  • (Mit Borland)
    Hi also...

    So hier kurz beschrieben ^^ es Funktioniert nun... hatte das Handle falsch...
    Fehlte nen "v"...

    Also wie bekannt mittels der Winamp SDK:

    Dies geht über das Handle von Winamp "Winamp v1.x"
    (ein Handle kannst du herausfinden indem du z.B. den ProzessExplorer von Sysinternals benutzt oder von Visual C++ gibts nen Handle ermittlung programm SD++ oder so... von Borland weis ich nicht ^^)

    So zum Handle:
    Deklarieren:

    HANDLE hwnd_winamp;
    
      //Danach Winamp "Finden" 
    
      hwnd_winamp = FindWindow("Winamp v1.x",NULL);
    
    /*Dann kannst du nun deinen Befehl übermitteln:
    
    z.B. abspielen eines Liedes Mittels Winamp:*/
    SendMessage(hwnd_winamp,WM_COMMAND,40045,0); 
    
    /*Oder abspielen des ersten liedes in der Liste:
    SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_STARTPLAY);*/
    

    MFG
    Dennis

    aso... zu regen bin ich noch nicht gekommen ^^

    PS: ansteuern kann ich nun alles... mache mich jetzt ans auslesen... *Liedtitel ect.* 🙄



  • Hi,
    Ich bins nochmal 🙄 !
    Habe nun das "Ansprechen" von winamp fertig, sowie winamp & mein progie in die registrie eintragen Autostart ect. jetzt kommt noch nen Timer zum Beenden von Winamp oder Windows und nen paar Spielerreihen... (bewegliches tray icon will ich versuchen ect.)

    Hab das Auslesen auch angefangen!!!
    und suche wiedermal seid Stunden nach ner Möglichkeit die "Lautstärke" von Winamp auszulesen!!!

    Da ich in der SDK von Winamp nur "das setzen" aber keine Get funktion gefunden habe!!!

    Könnt ihr mir da weiterhelfen ?!?

    Hoffe doch 😃

    MFG
    Dennis



  • Arg... hat sich erledigt...

    "If you pass volume as -666 then it will return the current volume."

    Voll überlesen 😉



  • Hi @ all 🙂 also...
    habe nen Weg gefunden gehabt, an den Liedtitel herranzukommen...
    Jedoch, bei der neueren Version von Winamp funktioniert dies nicht mehr!
    (Funktioniert mit Winamp 5.1111, 5.1112 nicht mehr und auch mit den vorherigen nicht! naja... wäre ja nicht das Problem jedoch funktionierte die "Skip to last song" Funktion bei der version 5.1111 nicht... somit muß ich mir fürs Lied auslesen nun etwas neues einfallen lassen...)

    Also hier ist mein alter Weg:
    //nicht ganz so *fein* aber hatte funktioniert... bzw. funktioniert... mit Fehlermeldungen ^^

    HANDLE hwnd_winamp;
      hwnd_winamp = FindWindow("Winamp v1.x",NULL);
      //Lied Auslesen!!!
      int Pufferlaenge = GetWindowTextLength(hwnd_winamp) + 1;
    
      AnsiString Puffer = sizeof(Pufferlaenge) ;
    
      Pufferlaenge = GetWindowText(hwnd_winamp, Puffer.c_str(), Pufferlaenge -9);
    
      LE_LName->Text = Puffer;
    

    Nun wollt ich so machen:
    🙄

    HANDLE hwnd_winamp;
      hwnd_winamp = FindWindow("Winamp v1.x",NULL);
      int currentPos;
      AnsiString P1,P2,P3; //Puffer ^^
    
      currentPos     = SendMessage(hwnd_winamp,WM_USER,0,IPC_GETLISTPOS);  
      //nun gibts 2 möglichkeiten den gleichen Pointer zu erhalten!
      P1             = SendMessage(hwnd_winamp,WM_USER,currentPos,IPC_GETPLAYLISTFILE);
      P2             =SendMessage(hwnd_winamp,WM_WA_IPC,currentPos,IPC_GETPLAYLISTTITLE);
    
      P3 = P1 + " " + P2; //dient nur aus faulheit zur ausgabenkontrolle ^^
    
      LE_Puffer->Text = P3;
      //wie komm ich mittels den Zeigern nun auf die Titel, & Interpretten meiner Lieder ?!?
      //KP mir fällt nichts mehr ein ^^ !!! PLZ HELP !!!
    

    Nur hab ich kein Plan, wie ich jetzt mittels dem Pointer, den ich da zurückgegeben bekomme, an meinen "Titel & Interpretten" rankomme... 😡

    Oder ich habe einfach mal wieder nen SDK Befehl überlesen 😉 kann aber wirklich nichts finden... auch google hat mir nicht weitergeholfen drum wende ich mich nochmal hoffnungsvoll an euch !

    Hmmm noch eine möglichkeit wäre, den Pfad des Liedes zu ermiteln und direktd en namen bzw. den ID3 - Tag auszulesen ^^ 😉 na möglichst wollt ich das da oben erstmal zum laufen bringen ^^

    MFG
    Dennis
    alias
    cyby 😃



  • #define IPC_GET_EXTENDED_FILE_INFO 290 //pass a pointer to the following struct in wParam
    #define IPC_GET_EXTENDED_FILE_INFO_HOOKABLE 296
    /* (requires Winamp 2.9+)
    ** to use, create an extendedFileInfoStruct, point the values filename and metadata to the
    ** filename and metadata field you wish to query, and ret to a buffer, with retlen to the
    ** length of that buffer, and then SendMessage(hwnd_winamp,WM_WA_IPC,&struct,IPC_GET_EXTENDED_FILE_INFO);
    ** the results should be in the buffer pointed to by ret.
    ** returns 1 if the decoder supports a getExtendedFileInfo method
    */
    typedef struct {
      char *filename;
      char *metadata;
      char *ret;
      int retlen;
    } extendedFileInfoStruct;
    

    Hatte dazu dei Structur angelegt, ein Structurobjekt zugewiesen, und dies dann so versucht:
    SendMessage(hwnd_winamp,WM_WA_IPC,&FileInfo,IPC_GET_EXTENDED_FILE_INFO);

    Naja... dabei kam nur ne ungültige verwendung heraus...*was hab ich da falsch gemacht ?*
    *kopfkratz*

    🙄

    MFG
    Dennis



  • ---- Header ----
    //Die Structur aus der SDK deklariert!
    
    typedef struct {
      char *filename;
      char *metadata;
      char *ret;
      int retlen;
    } extendedFileInfoStruct;
    
    //ein Structur Objekt erstellt!
      extendedFileInfoStruct File;
    
    ---- Cpp Datei ----
    //Winamp Handle
      HANDLE hwnd_winamp;
    //Winamp Handle Finden
      hwnd_winamp = FindWindow("Winamp v1.x",NULL);
    //Position ausfindig machen
      int currentPos   = SendMessage(hwnd_winamp,WM_USER,0,IPC_GETLISTPOS);
    //Strucktur abrufen   
      SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&File,IPC_GET_EXTENDED_FILE_INFO);
    //File Name auslesen!!!
      File.filename    = (char*)SendMessage(hwnd_winamp, WM_WA_IPC, currentPos, IPC_GETPLAYLISTFILE);
    

    😡
    Müste doch laufen... *oder* ?!? 😕
    *hmmmm* KP ^^

    Schießt mir winamp immer ab kann mir wer weiterhelfen, please!

    MFG
    Dennis


Anmelden zum Antworten