begin process at 2012 02 08 21:23:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Multimédia

 > [WIN32][C][DEV-C++] AUTO LIST EN HTML

[WIN32][C][DEV-C++] AUTO LIST EN HTML


 Information sur la source

Note :
Aucune note
Catégorie :Multimédia Classé sous :AVI, WMV, MOV, ASF, NSV Niveau :Initié Date de création :25/07/2008 Date de mise à jour :25/05/2009 18:51:23 Vu / téléchargé :3 036 / 94

Auteur : omnia

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

Bonjours a tous et toutes ^^


une petite source qui permet la génération automatique d'une liste de fichier sous forme de tableau en fichier html:

- liste des fichiers, puis répertoire avec leur taille + la durée (suivant les formats de fichiers)
- les formats de fichiers pour lesquelles la durée est affiché sont : AVI, DIVX, MP4, ASF, WMV, MOV, NSV

La source est un peu codé barbare je la mettrais à jour avec le temps :)

le binaire est présent;
renommer le fichier "AutoListHtml.exe_" par "AutoListHtml.exe"

j'attend vos remarques :p

Source

  • //------------------------------------------------------------------------------
  • // Projet AutoListHtml : génération de liste automatique
  • // Auteur : Hanteville Nicolas
  • // Fichier : main.c
  • // Version : 0.1
  • // Date de modification : 25/07/2008
  • // Site : http:\\omni.a.free.fr
  • //------------------------------------------------------------------------------
  • // gestion des includes
  • //------------------------------------------------------------------------------
  • #include "ressources.h"
  • //------------------------------------------------------------------------------
  • //emplacement de l'application en cours
  • void GetMyDirectory(char *path, unsigned int TAILLE)
  • {
  • char *c = path+GetModuleFileName(0, path,TAILLE);
  • while(*c != '\\') c--;
  • c++;
  • *c = 0;
  • }
  • //------------------------------------------------------------------------------
  • //convertion de nombre hexa sur 8 caractères en decimal
  • unsigned long HexaToDec(char *hexa,unsigned int taille)
  • {
  • unsigned long k=0;//resultat
  • unsigned long j=1,i; // j =coef multiplicateur et i variable de boucle
  • //traitement de la valeur hexa
  • for (i=(taille-1);i>0;i--)//calcul de la valeur hexa en decimal
  • {
  • switch(hexa[i])
  • {
  • case '1':k=k+j;break;
  • case '2':k=k+(2*j);break;
  • case '3':k=k+(3*j);break;
  • case '4':k=k+(4*j);break;
  • case '5':k=k+(5*j);break;
  • case '6':k=k+(6*j);break;
  • case '7':k=k+(7*j);break;
  • case '8':k=k+(8*j);break;
  • case '9':k=k+(9*j);break;
  • case 'a':k=k+(10*j);break;
  • case 'A':k=k+(10*j);break;
  • case 'b':k=k+(11*j);break;
  • case 'B':k=k+(11*j);break;
  • case 'c':k=k+(12*j);break;
  • case 'C':k=k+(12*j);break;
  • case 'd':k=k+(13*j);break;
  • case 'D':k=k+(13*j);break;
  • case 'e':k=k+(14*j);break;
  • case 'E':k=k+(14*j);break;
  • case 'f':k=k+(15*j);break;
  • case 'F':k=k+(15*j);break;
  • };
  • j=j*16;
  • };
  • return k;
  • };
  • //------------------------------------------------------------------------------
  • //lecture de la durée du fichier suivant le type
  • void LireDuree(char*fic,char*duree)
  • {
  • //http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx
  • unsigned short taille = strlen(fic);
  • unsigned long int time=0, frame=0;
  • unsigned long int final_time;
  • DWORD lue;
  • duree[0]=0;
  • //OK: AVI, DIVX, MP4, ASF, WMV, MOV, NSV
  • //identiques : AVI/MP4/DIVX
  • // a faire : MP3/MPG/MPEG/MKV/OGG/RM/RMVB/FLV
  • //MPG, FLV
  • //MKV header Format
  • //NSV
  • if(fic[taille-3]=='.' && (fic[taille-2]=='n' || fic[taille-2]=='N') && (fic[taille-1]=='s' || fic[taille-1]=='S'))
  • {
  • //on recherche en 1er le logo NSVf ou NSVs pour spéficier si streaming ou encodé
  • HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  • if (Hfic != INVALID_HANDLE_VALUE)
  • {
  • //on lit les 512er octets
  • char my_buffer[513];
  • SetFilePointer(Hfic,0,0,FILE_BEGIN);//on passe les 4er octets
  • ReadFile(Hfic,my_buffer,512,&lue,0);
  • //on test si un cmov (vidéo compressé)
  • int i;
  • BOOL ok = 1,stream=0;
  • for (i=0;i<512 && ok;i++)
  • {
  • if (my_buffer[i] == 'N' && my_buffer[i+1] == 'S' && my_buffer[i+2] == 'V')
  • {
  • ok=0;
  • if (my_buffer[i+3] == 's')stream=1;
  • i--;
  • }
  • }
  • if(ok)
  • {
  • //une video direct
  • if(!stream)
  • {
  • char tmp[9];
  • sprintf(tmp,"%02X%02X%02X%02X",my_buffer[i+12]&255,my_buffer[i+13]&255,my_buffer[i+14]&255,my_buffer[i+15]&255);
  • time = HexaToDec(tmp,8);
  • if(time)
  • {
  • time = time/1000;
  • if (time>1)sprintf(duree,"%02d:%02d:%02d",time/3600,(time%3600)/60,(time%3600)%60);
  • }
  • }//sinon streaming enregistré non traité
  • }
  • }
  • CloseHandle(Hfic);
  • }else if(fic[taille-4]=='.')
  • {
  • if(fic[taille-3]=='a' || fic[taille-3]=='A')
  • {
  • //AVI
  • if(fic[taille-1]=='i' || fic[taille-1]=='I')
  • {
  • HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  • if (Hfic != INVALID_HANDLE_VALUE)
  • {
  • //on passe les 32 1er octets
  • SetFilePointer(Hfic,32,0,FILE_BEGIN);
  • //temps entre les images
  • ReadFile(Hfic,&time,4,&lue,0);
  • //on passe les 12 octets suivants
  • SetFilePointer(Hfic,12,0,FILE_CURRENT);
  • //nombres d'images
  • ReadFile(Hfic,&frame,4,&lue,0);
  • if(time && frame)
  • {
  • //temps total en secondes (avant = microsecondes)
  • final_time = (time*frame)/1000000;
  • if (final_time>0)sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
  • }
  • }
  • CloseHandle(Hfic);
  • //ASF
  • }else if(fic[taille-1]=='f' || fic[taille-1]=='F')
  • {
  • HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  • if (Hfic != INVALID_HANDLE_VALUE)
  • {
  • //on passe les 24 1er octes
  • SetFilePointer(Hfic,24,0,FILE_BEGIN);
  • //on lit le nombre d'objets (entêtes) (4 octets)
  • //ReadFile(Hfic,&frame,4,&lue,0);
  • //on passe le nombre d'entête suivantes (256bits/)
  • //on passe les 64 1er octets
  • SetFilePointer(Hfic,/*(frame*32)+*/64+2+4,0,FILE_CURRENT);
  • unsigned __int64 mytime;
  • //durée
  • ReadFile(Hfic,&mytime,8,&lue,0);
  • if(mytime)
  • {
  • final_time = mytime/10000000;
  • sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
  • }
  • }
  • CloseHandle(Hfic);
  • }
  • }else if(fic[taille-3]=='m' || fic[taille-3]=='M')
  • {
  • //MP4
  • if(fic[taille-1]=='4')
  • {
  • HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  • if (Hfic != INVALID_HANDLE_VALUE)
  • {
  • //on passe les 32 1er octets
  • SetFilePointer(Hfic,32,0,FILE_BEGIN);
  • //temps entre les images
  • ReadFile(Hfic,&time,4,&lue,0);
  • //on passe les 12 octets suivants
  • SetFilePointer(Hfic,12,0,FILE_CURRENT);
  • //nombres d'images
  • ReadFile(Hfic,&frame,4,&lue,0);
  • if(time && frame)
  • {
  • //temps total en secondes (avant = microsecondes)
  • final_time = (time*frame)/1000000;
  • if (final_time>0)sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
  • }
  • }
  • CloseHandle(Hfic);
  • //MOV
  • }else if(fic[taille-2]=='o' || fic[taille-2]=='O')
  • {
  • HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  • if (Hfic != INVALID_HANDLE_VALUE)
  • {
  • //on lit les 256er octets
  • char my_buffer[257];
  • SetFilePointer(Hfic,0,0,FILE_BEGIN);//on passe les 4er octets
  • ReadFile(Hfic,my_buffer,256,&lue,0);
  • //on test si un cmov (vidéo compressé)
  • int i;
  • BOOL ok = 1;
  • for (i=0;i<252 && ok;i++)
  • {
  • if (my_buffer[i] == 'c' && my_buffer[i+1] == 'm' && my_buffer[i+2] == 'o' && my_buffer[i+3] == 'v')
  • {
  • ok=0;
  • }
  • }
  • if(ok) //une video non compressé
  • {
  • //on cherche mvhd = header video
  • //on récupère sa position
  • for (i=0;i<252 && ok;i++)
  • {
  • if (my_buffer[i] == 'm' && my_buffer[i+1] == 'v' && my_buffer[i+2] == 'h' && my_buffer[i+3] == 'd')
  • {
  • ok=0;
  • i--;
  • }
  • }
  • char tmp[9];
  • sprintf(tmp,"%02X%02X%02X%02X",my_buffer[i+16]&255,my_buffer[i+17]&255,my_buffer[i+18]&255,my_buffer[i+19]&255);
  • frame = HexaToDec(tmp,8);
  • sprintf(tmp,"%02X%02X%02X%02X",my_buffer[i+20]&255,my_buffer[i+21]&255,my_buffer[i+22]&255,my_buffer[i+23]&255);
  • time = HexaToDec(tmp,8);
  • if(frame && time)
  • {
  • time = time/frame;
  • if (time>1)sprintf(duree,"%02d:%02d:%02d",time/3600,(time%3600)/60,(time%3600)%60);
  • }
  • }
  • }
  • CloseHandle(Hfic);
  • }
  • }else if(fic[taille-3]=='w' || fic[taille-3]=='W')
  • {
  • //WMA et WMV = ASF + media compressé
  • if(fic[taille-2]=='m' || fic[taille-2]=='M')
  • {
  • HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  • if (Hfic != INVALID_HANDLE_VALUE)
  • {
  • //on passe les 102 1er octes
  • SetFilePointer(Hfic,102,0,FILE_BEGIN);
  • unsigned __int64 mytime;
  • //durée
  • ReadFile(Hfic,&mytime,8,&lue,0);
  • final_time = mytime/10000000;
  • if (final_time > 36000 || final_time<1)
  • {
  • SetFilePointer(Hfic,442,0,FILE_BEGIN);
  • ReadFile(Hfic,&mytime,8,&lue,0);
  • final_time = mytime/10000000;
  • if (final_time > 36000 || final_time<1)
  • {
  • SetFilePointer(Hfic,444,0,FILE_BEGIN);
  • ReadFile(Hfic,&mytime,8,&lue,0);
  • final_time = mytime/10000000;
  • if (final_time > 36000 || final_time<1)
  • {
  • SetFilePointer(Hfic,14,0,FILE_BEGIN);
  • ReadFile(Hfic,&mytime,8,&lue,0);
  • final_time = mytime/10000000;
  • if (final_time < 36000 && final_time>0)
  • sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
  • }else sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
  • }else sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
  • }else sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
  • }
  • CloseHandle(Hfic);
  • }
  • }
  • }else if (fic[taille-5]=='.')
  • {
  • //DIVX
  • if ((fic[taille-4]=='d' || fic[taille-4]=='D') && (fic[taille-1]=='x' || fic[taille-1]=='X'))
  • {
  • HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  • if (Hfic != INVALID_HANDLE_VALUE)
  • {
  • //on passe les 32 1er octets
  • SetFilePointer(Hfic,32,0,FILE_BEGIN);
  • //temps entre les images
  • ReadFile(Hfic,&time,4,&lue,0);
  • //on passe les 12 octets suivants
  • SetFilePointer(Hfic,12,0,FILE_CURRENT);
  • //nombres d'images
  • ReadFile(Hfic,&frame,4,&lue,0);
  • if (time&&frame)
  • {
  • //temps total en secondes (avant = microsecondes)
  • time = time*frame/1000000;
  • if (final_time>0)sprintf(duree,"%02d:%02d:%02d",time/3600,(time%3600)/60,(time%3600)%60);
  • }
  • }
  • CloseHandle(Hfic);
  • }
  • }
  • }
  • //------------------------------------------------------------------------------
  • //liste des répertoires dans le répertoire principal
  • BOOL ListItems(const char *fic,char *concat,HANDLE Hdest)
  • {
  • WIN32_FIND_DATA data;
  • char Rep [MAX_PATH];
  • char Concat[MAX_PATH];
  • __int64 taille_fic;
  • char duree[256];
  • char tmp[MAX_PATH]; DWORD copiee;
  • BOOL ret=0;
  • // les fichiers
  • HANDLE hfic = FindFirstFile(fic, &data);
  • if (hfic != INVALID_HANDLE_VALUE)
  • {
  • do
  • {
  • if(data.cFileName[0] != '.')
  • {
  • strcpy(Rep,fic);
  • Rep[strlen(fic)-3]=0;
  • strncat(Rep,data.cFileName,MAX_PATH);
  • if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//si un répertoire
  • {
  • }else if (!(!strcmp(data.cFileName,"Thumbs.db")))//sinon un fichier (sauf si un thumb)
  • {
  • ret=1;
  • strncat(Rep,"\0",MAX_PATH);
  • //taille du fichier
  • taille_fic = (data.nFileSizeHigh * MAXDWORD) + data.nFileSizeLow;
  • //durée du fichier
  • LireDuree(Rep,duree);
  • //affichage
  • if (taille_fic>1048576) //supérieur a 1 mo
  • sprintf(tmp," <tr><td><b>%s</b></td><td><b>%s</b></td><td><b>%2.2fmo</b></td><td><b>%s</b></td></tr>\r\n\0",concat,data.cFileName,taille_fic/1048576.0,duree);
  • else if (taille_fic>1024) //supérieur a 1 ko
  • sprintf(tmp," <tr><td><b>%s</b></td><td><b>%s</b></td><td><b>%2.2fko</b></td><td><b>%s</b></td></tr>\r\n\0",concat,data.cFileName,taille_fic/1024.0,duree);
  • else
  • sprintf(tmp," <tr><td><b>%s</b></td><td><b>%s</b></td><td><b>%do</b></td><td><b>%s</b></td></tr>\r\n\0",concat,data.cFileName,taille_fic,duree);
  • WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);
  • }
  • }
  • }while(FindNextFile (hfic,&data)); //récupération des fichiers 1 par 1
  • }
  • FindClose(hfic);
  • //les répertoires
  • hfic = FindFirstFile(fic, &data);
  • if (hfic != INVALID_HANDLE_VALUE)
  • {
  • do
  • {
  • if(data.cFileName[0] != '.')
  • {
  • strcpy(Rep,fic);
  • Rep[strlen(fic)-3]=0;
  • strncat(Rep,data.cFileName,MAX_PATH);
  • if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//si un répertoire
  • {
  • //traitement redondance
  • strncat(Rep,"\\*.*\0",MAX_PATH);
  • if (concat[0]!=0)
  • sprintf(Concat,"%s\\%s",concat,data.cFileName);
  • else
  • strcpy(Concat,data.cFileName);
  • if(ListItems(Rep,Concat,Hdest))
  • {
  • strcpy(tmp," <tr bgcolor=\"#DDDDDD\"><td colspan=\"4\"></td></tr>");
  • WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);
  • }
  • }
  • }
  • }while(FindNextFile (hfic,&data)); //récupération des fichiers 1 par 1
  • }
  • FindClose(hfic);
  • return ret;
  • }
  • //------------------------------------------------------------------------------
  • //liste des items présents dans un répertoire
  • void ListRep(const char *fic,HANDLE Hdest)
  • {
  • WIN32_FIND_DATA data;
  • HANDLE hfic = FindFirstFile(fic, &data);
  • char Rep [MAX_PATH];
  • char Concat[2]="";
  • __int64 taille_fic;
  • char duree[10];
  • char tmp[MAX_PATH]; DWORD copiee;
  • if (hfic != INVALID_HANDLE_VALUE)
  • {
  • do
  • {
  • if(data.cFileName[0] != '.')
  • {
  • strcpy(Rep,fic);
  • Rep[strlen(fic)-3]=0;
  • strncat(Rep,data.cFileName,MAX_PATH);
  • if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && !(!strcmp("System Volume Information",data.cFileName)) && !(!strcmp("RECYCLER",data.cFileName)))//si un répertoire
  • {
  • strncat(Rep,"\\*.*\0",MAX_PATH);
  • //impression du titre et début tableau
  • sprintf(tmp," <H2>%s</H2>\r\n"
  • " <table border=\"0\" cellspacing=\"2\" cellpadding=\"1\">\r\n"
  • " <tr><td BGCOLOR=#DDDDDD><b>Genre/serie</b></td><td BGCOLOR=#DDDDDD><b>Fichier</b></td><td width=\"120px\" BGCOLOR=#DDDDDD><b>Taille</b></td><td width=\"120px\" BGCOLOR=#DDDDDD><b>Durée</b></td></tr>\r\n"
  • ,data.cFileName);
  • WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);
  • ListItems(Rep,Concat,Hdest);
  • //fin du tableau
  • sprintf(tmp," </table>\r\n <BR/>\r\n");
  • WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);
  • }
  • }
  • }while(FindNextFile (hfic,&data)); //récupération des fichiers 1 par 1
  • }
  • FindClose(hfic);
  • }
  • //------------------------------------------------------------------------------
  • //génération de la liste
  • DWORD WINAPI GenList(LPVOID lParam)
  • {
  • char rep[MAX_PATH];
  • char repInit[MAX_PATH];
  • char tmp[MAX_PATH]; DWORD copiee;
  • unsigned int max = SendMessage(H_LST,LB_GETCOUNT,(WPARAM)0,(LPARAM)0);
  • if(max)
  • {
  • EnableWindow(H_start,0);
  • //ouverture du fichier
  • HANDLE Hdest= CreateFile(LIST_DEF,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,0);
  • if (Hdest != INVALID_HANDLE_VALUE)
  • {
  • //début du fichier
  • sprintf(tmp,"<html>\r\n");
  • WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);
  • while (max--)
  • {
  • SendMessage(H_LST,LB_GETTEXT,(WPARAM)0,(LPARAM)repInit);
  • sprintf(tmp," <center><H1>%s</H1></center>\r\n",repInit);
  • WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);
  • strncpy(rep,repInit,MAX_PATH);
  • strncat(rep,"*.*\0",MAX_PATH);
  • ListRep(rep,Hdest);
  • //suppression du 1er item
  • SendMessage(H_LST,LB_DELETESTRING,(WPARAM)0,(LPARAM)0);
  • }
  • //fin du fichier
  • sprintf(tmp,"</html>\r\n");
  • WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);
  • }
  • //fermeture du fichier
  • CloseHandle(Hdest);
  • //ouverture du fichier résultat
  • GetMyDirectory(tmp,MAX_PATH);
  • strncat(tmp,LIST_DEF,MAX_PATH);
  • strncat(tmp,"\0",MAX_PATH);
  • ShellExecute(NULL,"Open",tmp, NULL, NULL, SW_SHOWNORMAL);
  • EnableWindow(H_start,0);
  • }
  • }
  • //------------------------------------------------------------------------------
  • //gestion des appels et msg sur le fenêtre principale
  • HRESULT DlgProc(HWND hwnd,UINT Msg,WPARAM Wparam,LPARAM lParam)
  • {
  • HDROP H_DropInfo;
  • int nb,i;
  • switch(Msg)
  • {
  • case WM_INITDIALOG:
  • InitCommonControls();
  • //récupération des handl généraux
  • H_LST = GetDlgItem(hwnd,LST);
  • H_start = GetDlgItem(hwnd,BT_START);
  • //application d'une icone
  • SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(Hinst, MAKEINTRESOURCE(ID_ICON)));
  • break;
  • case WM_CLOSE:
  • EndDialog(hwnd,0);
  • //PostQuitMessage(0);
  • break;
  • case WM_COMMAND :
  • if ((LOWORD(Wparam) == BT_SUP) && (HIWORD(Wparam) == BN_CLICKED))
  • {
  • unsigned int nb = SendMessage(H_LST,LB_GETSELCOUNT,(WPARAM)0,(LPARAM)0);
  • if (nb>1)
  • {
  • //récupération des IDs des Items sélectionnés
  • int Items[MAX_PATH];
  • if (SendMessage(H_LST,LB_GETSELITEMS,(WPARAM)MAX_PATH,(LPARAM)Items)!= LB_ERR)
  • {
  • for (i=nb-1;i>-1;i--)
  • {
  • SendMessage(H_LST,LB_DELETESTRING,(WPARAM)(const)Items[i],(LPARAM)0);
  • }
  • }
  • }else
  • {
  • //suppression de la sélection
  • int nb = SendMessage(H_LST,LB_GETCURSEL,(WPARAM)0,(LPARAM)0);
  • if (nb>-1)
  • {
  • SendMessage(H_LST,LB_DELETESTRING,(WPARAM)nb,(LPARAM)0);
  • if (nb-1 <0)SendMessage(H_LST,LB_SETSEL ,(WPARAM)TRUE,(LPARAM)0);
  • else SendMessage(H_LST,LB_SETSEL ,(WPARAM)TRUE,(LPARAM)nb-1);
  • }
  • }
  • }else if ((LOWORD(Wparam) == BT_START) && (HIWORD(Wparam) == BN_CLICKED))
  • {
  • CreateThread(NULL, 0,GenList,0,0,0);
  • }else if ((LOWORD(Wparam) == BT_A_PROPOS) && (HIWORD(Wparam) == BN_CLICKED))
  • {
  • MessageBox(0,"AutoListHtml_V0.1 du 25/07/2008\n"
  • "Par : Hanteville Nicolas\n"
  • "Libre de droit et d'utilisations.\n"
  • "Site Web : http:\\\\omni.a.free.fr"
  • ,"A propos",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
  • }
  • break;
  • case WM_DROPFILES:
  • {
  • char tmp[MAX_PATH];
  • //récupération de la liste des fichiers sélectionnés + traitemen
  • H_DropInfo=(HDROP)Wparam;//récupération de la liste
  • //traitement : nb de fichier en drag
  • nb=DragQueryFile(H_DropInfo, 0xFFFFFFFF, NULL, 0 );
  • for (i=0;i<nb;i++)
  • {
  • DragQueryFile(H_DropInfo,i,tmp,DragQueryFile(H_DropInfo,i,0,0)+1 ); //récupération
  • SendMessage(H_LST,LB_ADDSTRING,(WPARAM)0,(LPARAM)tmp);
  • }
  • DragFinish(H_DropInfo);//libération de la mémoire
  • }
  • break;
  • }
  • return 0;
  • }
  • //------------------------------------------------------------------------------
  • //fonction principal (main)
  • int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hinstancePRECEDENTE, LPSTR CmdLine, int CmdShow)
  • {
  • Hinst = hInst;
  • //création de la fenêtre
  • DialogBox(0,MAKEINTRESOURCE(AutoListHtml),GetDesktopWindow(),(DLGPROC)DlgProc);
  • return 0;
  • }
//------------------------------------------------------------------------------
// Projet AutoListHtml  : génération de liste automatique
// Auteur               : Hanteville Nicolas
// Fichier              : main.c
// Version              : 0.1
// Date de modification : 25/07/2008
// Site                 : http:\\omni.a.free.fr
//------------------------------------------------------------------------------
// gestion des includes
//------------------------------------------------------------------------------
#include "ressources.h"
//------------------------------------------------------------------------------
//emplacement de l'application en cours
void GetMyDirectory(char *path, unsigned int TAILLE)
{
  char *c = path+GetModuleFileName(0, path,TAILLE);
  while(*c != '\\') c--;
  c++;
  *c = 0;
}
//------------------------------------------------------------------------------
//convertion de nombre hexa sur 8 caractères en decimal
unsigned long HexaToDec(char *hexa,unsigned int taille)
{
 unsigned long  k=0;//resultat   
 unsigned long  j=1,i; // j =coef multiplicateur et i variable de boucle       
    //traitement de la valeur hexa   
    
    for (i=(taille-1);i>0;i--)//calcul de la valeur hexa en decimal
    {
        switch(hexa[i])
        {
         case '1':k=k+j;break;
         case '2':k=k+(2*j);break;
         case '3':k=k+(3*j);break;
         case '4':k=k+(4*j);break;
         case '5':k=k+(5*j);break;
         case '6':k=k+(6*j);break;
         case '7':k=k+(7*j);break;
         case '8':k=k+(8*j);break;
         case '9':k=k+(9*j);break;
         case 'a':k=k+(10*j);break;
         case 'A':k=k+(10*j);break;
         case 'b':k=k+(11*j);break;
         case 'B':k=k+(11*j);break;
         case 'c':k=k+(12*j);break;
         case 'C':k=k+(12*j);break;
         case 'd':k=k+(13*j);break;
         case 'D':k=k+(13*j);break;
         case 'e':k=k+(14*j);break;
         case 'E':k=k+(14*j);break;
         case 'f':k=k+(15*j);break;
         case 'F':k=k+(15*j);break;
        }; 
        j=j*16;  
    };
  return k;       
};
//------------------------------------------------------------------------------
//lecture de la durée du fichier suivant le type
void LireDuree(char*fic,char*duree)
{
     //http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx
  unsigned short taille = strlen(fic);
  unsigned long int time=0, frame=0; 
  unsigned long int final_time;
  DWORD lue;
  duree[0]=0;

//OK: AVI, DIVX, MP4, ASF, WMV, MOV, NSV
//identiques : AVI/MP4/DIVX

// a faire : MP3/MPG/MPEG/MKV/OGG/RM/RMVB/FLV 

//MPG, FLV

//MKV header Format

  //NSV
  if(fic[taille-3]=='.' && (fic[taille-2]=='n' || fic[taille-2]=='N') && (fic[taille-1]=='s' || fic[taille-1]=='S'))
  {
      //on recherche en 1er le logo NSVf ou NSVs pour spéficier si streaming ou encodé           
          HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
          if (Hfic != INVALID_HANDLE_VALUE)
          {
             //on lit les 512er octets
             char my_buffer[513]; 
             SetFilePointer(Hfic,0,0,FILE_BEGIN);//on passe les 4er octets
             ReadFile(Hfic,my_buffer,512,&lue,0);

              //on test si  un cmov (vidéo compressé)
              int i;
              BOOL ok = 1,stream=0;
              for (i=0;i<512 && ok;i++)
              {
                if (my_buffer[i] == 'N' && my_buffer[i+1] == 'S' && my_buffer[i+2] == 'V')
                {
                  ok=0;
                  if (my_buffer[i+3] == 's')stream=1;
                  i--;
                }
              }
              
              if(ok) 
              {
                //une video direct
                if(!stream)
                {
                      char tmp[9];
                      sprintf(tmp,"%02X%02X%02X%02X",my_buffer[i+12]&255,my_buffer[i+13]&255,my_buffer[i+14]&255,my_buffer[i+15]&255);
                      time = HexaToDec(tmp,8);          
    
                      if(time)
                      {
                        time = time/1000;
                        if (time>1)sprintf(duree,"%02d:%02d:%02d",time/3600,(time%3600)/60,(time%3600)%60);
                      }
                }//sinon streaming enregistré non traité
             }
          }
          CloseHandle(Hfic);                        
  }else if(fic[taille-4]=='.')
  {
    if(fic[taille-3]=='a' || fic[taille-3]=='A')
    {
      //AVI
      if(fic[taille-1]=='i' || fic[taille-1]=='I')
      {
          HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
          if (Hfic != INVALID_HANDLE_VALUE)
          {
            //on passe les 32 1er octets
            SetFilePointer(Hfic,32,0,FILE_BEGIN);
            
            //temps entre les images
            ReadFile(Hfic,&time,4,&lue,0);
            
            //on passe les 12 octets suivants
            SetFilePointer(Hfic,12,0,FILE_CURRENT);   
            
            //nombres d'images
            ReadFile(Hfic,&frame,4,&lue,0);
            
            if(time && frame)
            {
                //temps total en secondes (avant = microsecondes)
                final_time = (time*frame)/1000000;
                if (final_time>0)sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
            }
          }
          CloseHandle(Hfic);
      //ASF
      }else if(fic[taille-1]=='f' || fic[taille-1]=='F')
      {
          HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
          if (Hfic != INVALID_HANDLE_VALUE)
          {
            //on passe les 24 1er octes
            SetFilePointer(Hfic,24,0,FILE_BEGIN);
            
            //on lit le nombre d'objets (entêtes) (4 octets)
            //ReadFile(Hfic,&frame,4,&lue,0);
            
            //on passe le nombre d'entête suivantes (256bits/)
            //on passe les 64 1er octets
            SetFilePointer(Hfic,/*(frame*32)+*/64+2+4,0,FILE_CURRENT);

            unsigned __int64 mytime;
            
            //durée
            ReadFile(Hfic,&mytime,8,&lue,0);

            if(mytime)
            {
                final_time = mytime/10000000;
                sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
            }
          }
          CloseHandle(Hfic);            
      }
    }else if(fic[taille-3]=='m' || fic[taille-3]=='M')
    {
        //MP4
        if(fic[taille-1]=='4')
        {
          HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
          if (Hfic != INVALID_HANDLE_VALUE)
          {
            //on passe les 32 1er octets
            SetFilePointer(Hfic,32,0,FILE_BEGIN);
            
            //temps entre les images
            ReadFile(Hfic,&time,4,&lue,0);
            
            //on passe les 12 octets suivants
            SetFilePointer(Hfic,12,0,FILE_CURRENT);   
            
            //nombres d'images
            ReadFile(Hfic,&frame,4,&lue,0);
            
            if(time && frame)
            {
                //temps total en secondes (avant = microsecondes)
                final_time = (time*frame)/1000000;
    
                if (final_time>0)sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
            }
          }
          CloseHandle(Hfic);      
      //MOV
      }else if(fic[taille-2]=='o' || fic[taille-2]=='O')
      {
          HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
          if (Hfic != INVALID_HANDLE_VALUE)
          {
             //on lit les 256er octets
             char my_buffer[257]; 
             SetFilePointer(Hfic,0,0,FILE_BEGIN);//on passe les 4er octets
             ReadFile(Hfic,my_buffer,256,&lue,0);

              //on test si  un cmov (vidéo compressé)
              int i;
              BOOL ok = 1;
              for (i=0;i<252 && ok;i++)
              {
                if (my_buffer[i] == 'c' && my_buffer[i+1] == 'm' && my_buffer[i+2] == 'o' && my_buffer[i+3] == 'v')
                {
                  ok=0;
                }
              }
              
              if(ok) //une video non compressé
              {
                  //on cherche  mvhd = header video
                  //on récupère sa position
                  for (i=0;i<252 && ok;i++)
                  {
                    if (my_buffer[i] == 'm' && my_buffer[i+1] == 'v' && my_buffer[i+2] == 'h' && my_buffer[i+3] == 'd')
                    {
                      ok=0;
                      i--;
                    }
                  }
                  char tmp[9];
                  sprintf(tmp,"%02X%02X%02X%02X",my_buffer[i+16]&255,my_buffer[i+17]&255,my_buffer[i+18]&255,my_buffer[i+19]&255);
                  frame = HexaToDec(tmp,8);
        
                  sprintf(tmp,"%02X%02X%02X%02X",my_buffer[i+20]&255,my_buffer[i+21]&255,my_buffer[i+22]&255,my_buffer[i+23]&255);
                  time = HexaToDec(tmp,8);          

                  if(frame && time)
                  {
                    time = time/frame;
                    if (time>1)sprintf(duree,"%02d:%02d:%02d",time/3600,(time%3600)/60,(time%3600)%60);
                  }
              }
          }
          CloseHandle(Hfic);              
      }     
    }else if(fic[taille-3]=='w' || fic[taille-3]=='W')
    {   
      //WMA et WMV = ASF + media compressé
      if(fic[taille-2]=='m' || fic[taille-2]=='M')
      {            
          HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
          if (Hfic != INVALID_HANDLE_VALUE)
          {
            //on passe les 102 1er octes
            SetFilePointer(Hfic,102,0,FILE_BEGIN);
            unsigned __int64 mytime;
            //durée
            ReadFile(Hfic,&mytime,8,&lue,0);

            final_time = mytime/10000000;
            
            if (final_time > 36000 || final_time<1)
            {
              SetFilePointer(Hfic,442,0,FILE_BEGIN);
              ReadFile(Hfic,&mytime,8,&lue,0);
              final_time = mytime/10000000;
              
              if (final_time > 36000  || final_time<1)
              {
                  SetFilePointer(Hfic,444,0,FILE_BEGIN);
                  ReadFile(Hfic,&mytime,8,&lue,0);
                  final_time = mytime/10000000;
                  
                  if (final_time > 36000  || final_time<1)
                  {
                      SetFilePointer(Hfic,14,0,FILE_BEGIN);
                      ReadFile(Hfic,&mytime,8,&lue,0);
                      final_time = mytime/10000000;
                      
                      if (final_time < 36000 && final_time>0)
                        sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
                  }else sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
              }else sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
            }else sprintf(duree,"%02d:%02d:%02d",final_time/3600,(final_time%3600)/60,(final_time%3600)%60);
          }
          CloseHandle(Hfic);   
      }    
    }
  }else if (fic[taille-5]=='.')
  {
    //DIVX
    if ((fic[taille-4]=='d' || fic[taille-4]=='D') && (fic[taille-1]=='x' || fic[taille-1]=='X'))
    {
      HANDLE Hfic = CreateFile(fic,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
      if (Hfic != INVALID_HANDLE_VALUE)
      {
        //on passe les 32 1er octets
        SetFilePointer(Hfic,32,0,FILE_BEGIN);
        
        //temps entre les images
        ReadFile(Hfic,&time,4,&lue,0);
        
        //on passe les 12 octets suivants
        SetFilePointer(Hfic,12,0,FILE_CURRENT);   
        
        //nombres d'images
        ReadFile(Hfic,&frame,4,&lue,0);
        
        if (time&&frame)
        {
            //temps total en secondes (avant = microsecondes)
            time = time*frame/1000000;
            
            if (final_time>0)sprintf(duree,"%02d:%02d:%02d",time/3600,(time%3600)/60,(time%3600)%60);
        }
      }
      CloseHandle(Hfic);
    }
  }
}

//------------------------------------------------------------------------------
//liste des répertoires dans le répertoire principal
BOOL ListItems(const char *fic,char *concat,HANDLE Hdest)
{
   WIN32_FIND_DATA data;
   char Rep [MAX_PATH];
   char Concat[MAX_PATH];
   __int64 taille_fic;
   char duree[256];
   char tmp[MAX_PATH]; DWORD copiee;
   BOOL ret=0;
   
   // les fichiers
   HANDLE hfic = FindFirstFile(fic, &data);
   
   if (hfic != INVALID_HANDLE_VALUE)
   {
     do
     {
       if(data.cFileName[0] != '.')
       {
         strcpy(Rep,fic);
         Rep[strlen(fic)-3]=0;
         strncat(Rep,data.cFileName,MAX_PATH);
           
         if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//si un répertoire
         {                                                                                                                                                                                                                                   
         }else if (!(!strcmp(data.cFileName,"Thumbs.db")))//sinon un fichier (sauf si un thumb)
         {
           ret=1;
           strncat(Rep,"\0",MAX_PATH);
           
           //taille du fichier
           taille_fic = (data.nFileSizeHigh * MAXDWORD) + data.nFileSizeLow;   
           
           //durée du fichier  
           LireDuree(Rep,duree);   
           
           //affichage
           if (taille_fic>1048576) //supérieur a 1 mo       
              sprintf(tmp,"      <tr><td><b>%s</b></td><td><b>%s</b></td><td><b>%2.2fmo</b></td><td><b>%s</b></td></tr>\r\n\0",concat,data.cFileName,taille_fic/1048576.0,duree);       
           else if (taille_fic>1024) //supérieur a 1 ko       
              sprintf(tmp,"      <tr><td><b>%s</b></td><td><b>%s</b></td><td><b>%2.2fko</b></td><td><b>%s</b></td></tr>\r\n\0",concat,data.cFileName,taille_fic/1024.0,duree);    
           else   
              sprintf(tmp,"      <tr><td><b>%s</b></td><td><b>%s</b></td><td><b>%do</b></td><td><b>%s</b></td></tr>\r\n\0",concat,data.cFileName,taille_fic,duree);
           
           WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);               
         }
       }
     }while(FindNextFile (hfic,&data)); //récupération des fichiers 1 par 1
   }
   FindClose(hfic);

   //les répertoires
   hfic = FindFirstFile(fic, &data);
   
   if (hfic != INVALID_HANDLE_VALUE)
   {
     do
     {
       if(data.cFileName[0] != '.')
       {
         strcpy(Rep,fic);
         Rep[strlen(fic)-3]=0;
         strncat(Rep,data.cFileName,MAX_PATH);
           
         if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//si un répertoire
         {                                                                                                                                                                                                                                   
           //traitement redondance
           strncat(Rep,"\\*.*\0",MAX_PATH);
           if (concat[0]!=0)
             sprintf(Concat,"%s\\%s",concat,data.cFileName);
           else 
             strcpy(Concat,data.cFileName);
  
           if(ListItems(Rep,Concat,Hdest))
           {
             strcpy(tmp,"      <tr bgcolor=\"#DDDDDD\"><td colspan=\"4\"></td></tr>");
             WriteFile(Hdest,tmp,strlen(tmp),&copiee,0);
           }

         }
       }
     }while(FindNextFile (hfic,&data)); //récupération des fichiers 1 par 1
   }
   FindClose(hfic);
      
   return ret;
}
//------------------------------------------------------------------------------
//liste des items présents dans un répertoire
void ListRep(const char *fic,HANDLE Hdest)
{
   WIN32_FIND_DATA data;
   HANDLE hfic = FindFirstFile(fic, &data);
   char Rep [MAX_PATH];
   char Concat[2]="";
   __int64 taille_fic;
   char duree[10];
   char tmp[MAX_PATH]; DWORD copiee;
   
   if (hfic != INVALID_HANDLE_VALUE)
   {
     do
     {
       if(data.cFileName[0] != '.')
       {
         strcpy(Rep,fic);
         Rep[strlen(fic)-3]=0;
         strncat(Rep,data.cFileName,MAX_PATH);
           
         if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && !(!strcmp("System Volume Information",data.cFileName)) && !(!strcmp("RECYCLER",data.cFileName)))//si un répertoire
         {                                                                                                                                                                                                                                   
           strncat(Rep,"\\*.*\0",MAX_PATH);
           
           //impression du titre et début tableau
           sprintf(tmp,"    <H2>%s</H2>\r\n"
                           "    <table border=\"0\" cellspacing=\"2\" cellpadding=\"1\">\r\n"
                           "      <tr><td BGCOLOR=#DDDDDD><b>Genre/serie</b></td><td BGCOLOR=#DDDDDD><b>Fichier</b></td><td width=\"120px\"  BGCOLOR=#DDDDDD><b>Taille</b></td><td width=\"120px\" BGCOLOR=#DDDDDD><b>Durée</b></td></tr>\r\n"
           ,data.cFileName);
           WriteFile(Hdest,tmp,strlen(tmp),&copiee,0); 
             
           ListItems(Rep,Concat,Hdest);
           
           //fin du tableau
           sprintf(tmp,"    </table>\r\n    <BR/>\r\n");
           WriteFile(Hdest,tmp,strlen(tmp),&copiee,0); 
         }
       }
     }while(FindNextFile (hfic,&data)); //récupération des fichiers 1 par 1
   }
   FindClose(hfic);
}

//------------------------------------------------------------------------------
//génération de la liste
DWORD WINAPI GenList(LPVOID lParam)
{
  char rep[MAX_PATH];
  char repInit[MAX_PATH];
  char tmp[MAX_PATH]; DWORD copiee;
  unsigned int max = SendMessage(H_LST,LB_GETCOUNT,(WPARAM)0,(LPARAM)0);
  
  if(max)
  {
      EnableWindow(H_start,0);
      //ouverture du fichier
      HANDLE Hdest= CreateFile(LIST_DEF,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,0);
      if (Hdest != INVALID_HANDLE_VALUE)
      {
          //début du fichier
          sprintf(tmp,"<html>\r\n");
          WriteFile(Hdest,tmp,strlen(tmp),&copiee,0); 
        
         while (max--)
         {
              SendMessage(H_LST,LB_GETTEXT,(WPARAM)0,(LPARAM)repInit);
              sprintf(tmp,"    <center><H1>%s</H1></center>\r\n",repInit);
              WriteFile(Hdest,tmp,strlen(tmp),&copiee,0); 
              
              strncpy(rep,repInit,MAX_PATH);
              strncat(rep,"*.*\0",MAX_PATH);
              ListRep(rep,Hdest);
              
              //suppression du 1er item
              SendMessage(H_LST,LB_DELETESTRING,(WPARAM)0,(LPARAM)0); 
          }
          
          //fin du fichier
          sprintf(tmp,"</html>\r\n");
          WriteFile(Hdest,tmp,strlen(tmp),&copiee,0); 
      }
      //fermeture du fichier
      CloseHandle(Hdest); 
      
      //ouverture du fichier résultat
      GetMyDirectory(tmp,MAX_PATH);
      strncat(tmp,LIST_DEF,MAX_PATH);
      strncat(tmp,"\0",MAX_PATH);      
      
      ShellExecute(NULL,"Open",tmp, NULL, NULL, SW_SHOWNORMAL); 
      EnableWindow(H_start,0);
  } 
}
//------------------------------------------------------------------------------
//gestion des appels et msg sur le fenêtre principale
HRESULT DlgProc(HWND hwnd,UINT Msg,WPARAM Wparam,LPARAM lParam) 
{
 HDROP H_DropInfo;
 int nb,i;
  switch(Msg) 
  {
      case WM_INITDIALOG:
           InitCommonControls();
           
           //récupération des handl généraux
           H_LST           = GetDlgItem(hwnd,LST);
           H_start         = GetDlgItem(hwnd,BT_START);
          //application d'une icone
          SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(Hinst, MAKEINTRESOURCE(ID_ICON)));
      break;
      case WM_CLOSE:
          EndDialog(hwnd,0);
          //PostQuitMessage(0);
      break;
      case WM_COMMAND :
           
           if ((LOWORD(Wparam) == BT_SUP) && (HIWORD(Wparam) == BN_CLICKED))
           {
             unsigned int nb = SendMessage(H_LST,LB_GETSELCOUNT,(WPARAM)0,(LPARAM)0);
             if (nb>1) 
             {
               //récupération des IDs des Items sélectionnés
               int Items[MAX_PATH];
               if (SendMessage(H_LST,LB_GETSELITEMS,(WPARAM)MAX_PATH,(LPARAM)Items)!= LB_ERR)
               {
                 for (i=nb-1;i>-1;i--)
                 {
                   SendMessage(H_LST,LB_DELETESTRING,(WPARAM)(const)Items[i],(LPARAM)0);
                 }
               }
             }else
             {
                 //suppression de la sélection
                 int nb = SendMessage(H_LST,LB_GETCURSEL,(WPARAM)0,(LPARAM)0);
                 
                 if (nb>-1)
                 {
                   SendMessage(H_LST,LB_DELETESTRING,(WPARAM)nb,(LPARAM)0);
                   
                   if (nb-1 <0)SendMessage(H_LST,LB_SETSEL ,(WPARAM)TRUE,(LPARAM)0);
                   else SendMessage(H_LST,LB_SETSEL ,(WPARAM)TRUE,(LPARAM)nb-1);
                 }
             }
           }else if ((LOWORD(Wparam) == BT_START) && (HIWORD(Wparam) == BN_CLICKED))
           {
             CreateThread(NULL, 0,GenList,0,0,0); 
           }else if ((LOWORD(Wparam) == BT_A_PROPOS) && (HIWORD(Wparam) == BN_CLICKED))
           {
              MessageBox(0,"AutoListHtml_V0.1 du 25/07/2008\n"
                           "Par : Hanteville Nicolas\n"
                           "Libre de droit et d'utilisations.\n"
                           "Site Web : http:\\\\omni.a.free.fr"
              ,"A propos",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);    
           }
      break;
      case WM_DROPFILES:           
           {
               char tmp[MAX_PATH];
               
               //récupération de la liste des fichiers sélectionnés + traitemen
               H_DropInfo=(HDROP)Wparam;//récupération de la liste
               
               //traitement : nb de fichier en drag
               nb=DragQueryFile(H_DropInfo, 0xFFFFFFFF, NULL, 0 );
    
               for (i=0;i<nb;i++)
               {
                 DragQueryFile(H_DropInfo,i,tmp,DragQueryFile(H_DropInfo,i,0,0)+1 ); //récupération
                 SendMessage(H_LST,LB_ADDSTRING,(WPARAM)0,(LPARAM)tmp);
               }
               DragFinish(H_DropInfo);//libération de la mémoire
           }
      break;
   }     
   return 0;        
}
//------------------------------------------------------------------------------
//fonction  principal (main)
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hinstancePRECEDENTE, LPSTR CmdLine, int CmdShow) 
{  
  Hinst = hInst;
  
  //création de la fenêtre
  DialogBox(0,MAKEINTRESOURCE(AutoListHtml),GetDesktopWindow(),(DLGPROC)DlgProc); 
   
  return 0;
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

25 juillet 2008 21:28:35 :
- ajout zip
25 mai 2009 18:51:23 :
-...

 Sources du même auteur

Source avec Zip Source avec une capture [WIN32][CB]CRÉATION DIRECTE DE PDF
[C][RTF] EXEMPLE DE TABLEAU EN RTF (POUR RICHEDIT)
Source avec Zip [WMI][C++][DEV-C++] LECTURES D'INFORMATIONS AVEC WMI SOUS DE...
Source avec Zip Source avec une capture [WIN32][C][DEV-C++] GRAPH TRANSPARENT DEBIT RESEAU
Source avec Zip Source avec une capture [WIN32][C][DEV-C++] WSEARCH GOOGLE HACK

 Sources de la même categorie

Source avec Zip ADAPTER LES TEMPS DE SUBTITLES DE SOUS TITRAGE ENTRE DEUX LA... par berrami
Source avec Zip Source avec une capture DÉTECTION DE VISAGE (YEUX, NEZ, BOUCHE) AVEC OPENCV EN TEMPS... par MadM@tt
Source avec Zip Source avec une capture GÉNÉRATEUR FM EXPÉRIMENTAL par tontonCD
Source avec Zip LECTEUR MULTIMÉDIA par omegatou
Source avec Zip IMPLÉMENTATION D'UN ALGORITHME DE COMPRESSION/DECOMPRESSION ... par eemikhm

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TRAITEMENT DES VIDÉOS AVI: IMANALYSE par Pistol_Pete
Source avec Zip Source avec une capture MP3 DX9 JOUER par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture DVD2AVI2 ---- ENCODAGE FICHIERS : VOB VERS AVI par JanMark
Source avec Zip CLASSE CLECTEURVIDÉO par bobbyantho
Source avec Zip LIRE UN STREAM AUDIO À PARTIR D'UN FICHIER AVI. par k_otik

Commentaires et avis

Commentaire de JPR74 le 28/07/2008 10:58:47

Programme sans doute intéressant (surtout en Dev-CPP) mais, comme presque tous ceux qui sont présentés, assez difficile à lire car écrit sans la moindre rigueur (cadrages, tabulations fantaisistes, lignes trop longues, etc) !
Mais au moins, l'auteur a le courage de l'annoncer ("écrit un peu barbare"...) !
C'est pourtant si simple d'écrire proprement dés le début et les modifications sont ensuite beaucoup plus faciles.
C'est dommage car il y a souvent de bonnes idées dans les programmes proposés...
Si, comme je le redoute, cela continue, je finirai par proposer un article sur la façon d'écrire le C (et C++) pour obtenir des programmes faciles à lire et à modifier.
Quant à l'orthographe ... je préfère ne rien en dire !
Programmant depuis plus de 40 ans (assembleur, Cobol, Fortran, Basic, C et C++), je sais de quoi je parle et je vourais bien en faire profiter les autres !
L'expérience la plus redoutable (pour mes élèves) est de leur faire modifier un programme écrit par un autre car là, ils comprennent vite la nécessité de bien écrire (même pour soi même).
A suivre...

Commentaire de omnia le 28/07/2008 12:54:38

Bonjour,

merci pour le commentaire.

Pour information cette source est une ébauche et quand je dis "écrit un peu barbare" c'est surtout pour la fonction de calcul/lecture de la durée des fichiers multimédia.

On remarque notement que ce code est indenté (et je ne connais aucune norme qui fixe une taille d'indentation) commenté même si pas suffisement (mais je ne vais pas non plus commenté des if)

Pour ce qui est des articles, possible a toute personne de faire par à la communauté.

Pour ce qui est des élèves je donne aussi des cours de c et d'administration et je developpe en de multiples langage depuis plus de 10 ans maintenant si c'est du code objet qu'il vous faut faite du java du python ...

Je n'ai pas de mauvaise pensé envers ce commentaire mais je pense qu'il faut arrêter de ce f. du monde!

Commentaire de JPR74 le 28/07/2008 19:20:09

Bonjour,

   Je suis désolé si vous avez mal compris mon commentaire.
   Je n'ai pas l'impression de me moquer de qui que ce soit quand je dis qu'un programme peut aussi être agréable à parcourir et facile à modifier quand il est bien écrit, quel que soit le langage utilisé.
   C'est vrai qu'il n'y a aucune règle définie pour l'écriture d'un programme, ce qui conduit, hélas, aux abus que je déplore.
   L'utilisation d'un langage objet n'empêche pas d'écrire des horreurs...

   Restons en là pour l'instant mais il n'est pas exclu qu'une nouvelle colère me pousse à déposer un exemple de programme facile à lire sans avoir à manipuler sans arrêt l'ascenseur pour voir le bout des lignes.  

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lecture d'un fichier ASF ou WMV [ par matge ] BonjourJ'enregistre un flux RTP que je recois apres avoir generé ma connection RTSP avec un serveur Microsoft.Je cree un fichier de type CFile avec un Creer un fichier ASF [ par matge ] Bonjour Je dois creer un fichier de type ASF et stocker des données pointées par un pointeur au fil du temps.Comment dois je m y prendre?J'ai du mal a Class AVI [ par samuelbrie ] Je recherche une classe avi pour décortiquer l'entete et les frames. Merci AVIFile copier frame [ par samuelbrie ] Je cherche comment copier une frame d'un avi dans un bitmapet meme si c'est possible réécrire l'avi.Je doit incruster des points de couleur sur un fic optimiser un codes asm [ par sajid_morad ] salut tout le monde , j ai une parti du code en c++, que j ai voulu optimiser , le l ai reécri en asm , mai ça donne pas grand chose, si quelqu un pou pourquoi ca marche pas (lecture fichier mpg) [ par homerde ] coucoumoi je veux recupere les images d un fichier .mpg.&nbsp;j ai fais cette fonction et ca marche pas.&nbsp;&nbsp;j ai&nbsp;message d erreur&nbsp;me MCI pour lire un fichier avi [ par chamoine ] J'aimerai lire des fichiers avi dans mon prog. Pour cela je voulai utiliser le MCI mais je n'y arrive pas. Le but de mon code est de pouvoir lire un f Codage image vidéos bmp avi mpg etc... [ par sullyper ] Bonjour,Je suis programmeur et j'aimerais savoir comment sont cod&#233;s les images bitmaps (toute la structure), et idem pour ce qui concerne les vid serie d'image bmp à partir de vidéo AVI [ par little_bius ] Bonjour,Je voudrai savoir s'il est possible de transformer une vid&#233;o au format AVI en une s&#233;rie d'image bmp.Par exemple si on a une vid&#233 creation d'un fichier avi avec plusieur avi [ par gregbds ] bonjour je voudrais cr&#233;er un fichier video avi &#224; partir de plusieur morceaux de fichier avi mis bout &#224; bout. Je recherche se petit prog


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,357 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales