/* 
   Name:         get_winamp_title 2.0
   Author:       cLx - http://clx.freeshell.org/
   Date:         08/06/05 14:44
   Description:  I did this program to retrieve the name of the song which
                 is played in winamp in a php script.  I know, the method I
                 used is a bit rough, but it works perfectly.
*/

#include <windows.h>
#include <stdio.h>
#include <string.h>

#define WINAMP_CLASS  "Winamp v1.x"
#define MAXLENGTH     1000

int Remove(char *buffer, char *tokill);

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, 
                     LPSTR lpszArgument, int nFunsterStil) {

   /* Déclarations de variables et de pointeurs */
                     
   DWORD pid;
   HANDLE hProcess;
   char buffer[MAXLENGTH + 1] = "";
   char *pbuf;


   /* Puis on essaye de trouver  le HWND de la fenetre de winamp, à l'aide 
      du nom de la classe. Si on ne trouve pas, on retournera un message 
      d'erreur et on quittera. */

   HWND fenetre = FindWindow(WINAMP_CLASS, NULL);
   if (!fenetre) {
       printf("The MP3 player not running.");
       return 1;
   }    
   
   
   /* Si on a le HWND, on va récupérer le titre de la fenetre et ensuite
      trouver coller un pointeur sur la localisation après le premier espace,
      s'il est pas trop loin. */
   
   GetWindowText((HWND)fenetre, buffer, MAXLENGTH);
   pbuf = strchr(buffer, 32) + 1;
   if ((!pbuf) || (pbuf > buffer + 6)) { 
       pbuf = buffer;
   }

   /* On peut supprimer la mention " - Winamp" ainsi que quelques 
      autres au passage */

   Remove(pbuf, " (PulsRadio - www.pulsradio.com)");
   Remove(pbuf, " - Winamp");
   
   
   /* Puis, on sort ça sur la sortie standard, qui sera redirigée par le
      script d'au dessus, et puis on quitte */

   printf("%s", pbuf);
   return 0;
}


/* cLx: Remove v1.0 :
   Cette fonction supprime toute les occurences 
   d'une chaine dans une autre, et retourne le nombre de suppressions.
   J'ai rien trouvé de plus simple, mais ça à été marrant de programmer ça ! */

int Remove(char *buffer, char *tokill){
   char *ptr;
   unsigned int count = 0;
   while (ptr = strstr(buffer, tokill)){
       if (ptr) {
           int lenA = strlen(tokill);
           int lenB = strlen(buffer);
           char *ptr2 = ptr + lenA;
       
           while(*ptr2) {
               *ptr = *ptr2;
               ptr++; ptr2++;
           }
           *ptr = 0;
           count++;
       }
   }
   return count;
}

 [PROGRAMME COMPLET] AutoExit (a sa propre page)
 [C] [Win32] Mouseloop : Ou comment faire des trucs stupides avec le pointeur de la souris
 [PHP] [INCLUDE] Récupérer des chaines quel que soit l'état de magicquotes.
 [C] [Win32] APM : Faire passer les moniteurs en green mode/locker le PC rapidement.
 [QBASIC] Lire par RS-232 les données du multimetre VC 670 et les enregistrer dans un CSV
 [C] [Portable] [Connerie] Un encodeur/décodeur ROT13 et pas que 13, en mode console.
 [mIRC] Ce client IRC n'est pas très convivial avec le mode "away". Voila qui est mieux.
 [C] [Win32] Un programme pour récupérer le nom de la chanson actuellement jouée.
 [Cµ] [PIC] [CCS] Le programme d'un chariot suiveur de ligne noire par caméra video.
10  [PROJET SOURCEFORGE] [C] Un client/passerelle en mode console pour les minichats (rmcgirr83.org) sur forums PhpBB
11  [C] [Win32] [NHC] "Workaround" d'un probleme avec le son de mon laptop lors du changement de frequence cpu
12  [C] Make-ILDA : a C routine to create ILDA files, for lasershows.