|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
[WIN32][C][DEV-C++] AUTO LIST EN HTML
Information sur la source
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"
- "Pour toute question : nico248@free.fr\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"
"Pour toute question : nico248@free.fr\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
Pour les "Membres Club", vous pouvez 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
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
|