|
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"
- "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
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
- 25 mai 2009 18:51:23 :
- -...
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
|