Accueil > > > [WIN32][C][DEV-C++] AUTO LIST EN HTML
[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"
- "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;
}
Historique
- 25 juillet 2008 21:28:35 :
- - ajout zip
- 25 mai 2009 18:51:23 :
- -...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
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. j ai fais cette fonction et ca marche pas. j ai message d erreur 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é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éo au format AVI en une série d'image bmp.Par exemple si on a une vidé
creation d'un fichier avi avec plusieur avi [ par gregbds ]
bonjour je voudrais créer un fichier video avi à partir de plusieur morceaux de fichier avi mis bout à bout. Je recherche se petit prog
|
Derniers Blogs
TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVéTECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVé par ROMELARD Fabrice
Speaker : Guillaume Rochette Cette session est dédiée à fournir le retour sur la mise en place d'un cloud privé (IaaS) par Osiatis pour son compte ou celui de ses clients. Ce projet s'est déroulé sur 4 mois et a permis de faire évoluer...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
AUMLAUML par sassion
Cliquez pour lire la suite par sassion
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|