begin process at 2010 02 10 04:54:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > LISTEUR DE FICHIERS [WIN32 / VC6]

LISTEUR DE FICHIERS [WIN32 / VC6]


 Information sur la source

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Niveau :Débutant Date de création :17/08/2004 Date de mise à jour :20/08/2004 14:33:45 Vu / téléchargé :6 732 / 579

Auteur : thebigbang

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour,
Voici un listeur de fichiers réalisé dans le cadre d'un *petit* concours de programmation.
J'ai rajouté des petites fonctions basiques au listeur de fichier demandé. Mon programme liste séparément fichiers et dossiers. On peut naviguer sur tous les disques durs de l'ordinateur. Pour les fichiers, on peut l'ouvrir en lecture et voir quelques infos sur lui.
Pour certaines extensions, la vue du fichier ne fonctionne pas, ce qui est compréhensible. Pour y remédier, j'ai codé une sorte de filtre d'extensions.

Dans tous les cas, j'ai essayé d'utiliser des trucs courants en prog Win32 :
- Le sous classement de l'Edit où l'on peut rentrer le chemin du dossier à lister. Il s'agit de filtrer les messages et de voir si on appuie sur la touche <Entrée>. On fais suivre les autres si ce n'est pas le cas.
- Obtenir la liste des lecteurs d'un disque.
- Mapper un fichier en mémoire
- Réaction à un click sur une zone du Dialog. J'ai codé ça peut être un peu n'importe comment. Je voyais pas trop comment le faire sinon.
- L'obtention d'informations sur des fichiers. Ici j'ai affiché les dates (création/modification/dernier accès). On utilise une structure BY_HANDLE_FILE_INFORMATION et une SYSTEMTIME

Le projet VC++6 se trouve dans le zip

Voici le code du fichier principal : lister.cpp

Source

  • /************************************************************************************************
  • File Browser v1.03 by BiGBANG
  • -----------------------------
  • SecurityHack Programming Contest, August 2oo4
  • History :
  • ---------
  • v1.03
  • - Filters for visualisation of files
  • - Two languages interface : French and English
  • v1.02
  • - File visualisation. Filter needed
  • v1.01
  • - Subclassing
  • - Numbers of Folders/Files
  • - File Informations
  • - Bitmap/AboutBox
  • v1.00
  • - File Browser only :)
  • ************************************************************************************************/
  • #include <stdio.h> // sprintf(),...
  • #include <windows.h>
  • #include "resource.h"
  • HINSTANCE hinst;
  • WNDPROC oldProc; // orignal proc
  • HWND hcmb,hlistFiles,hlistFolders,hMainDlg;
  • char buf[MAX_PATH];
  • char CurrentFile[MAX_PATH];
  • char FileExt[8],buf2[8];
  • char c;
  • char *sz;
  • int i;
  • int xPos,yPos,nbFiles,nbFolders;
  • // Eextension Filter
  • char *ExtensionsOK="txt,bat,ini,c,cpp,asm,log,rc,res,dat,"; // a coma between them
  • // a terminal coma
  • /*
  • * Texts
  • */
  • // French
  • char AppTitle[]="Listeur de fichiers v1.03 - BiGBANG - Security Hack Concours - 17/08/2004";
  • char AppDisks[]="Liste des lecteurs :";
  • char AppToList[]="Répertoire à lister :";
  • char AppNumFolders[]="Nombre de dossiers :";
  • char AppNumFiles[]="Nombre de fichiers :";
  • char AppName[]="Nom :";
  • char AppFileSize[]="Taille";
  • char AppFileCreation[]="Date de création";
  • char AppLastWrite[]="Date de denier écriture";
  • char AppLastAccess[]="Date de denier accès";
  • char AppDateFormat[]="Format de la date : jj/mm/aaaa";
  • char SeeFileTitle[]="Vue de fichiers";
  • char SeeFileCurrentFile[]="Fichier en cours";
  • char MsgError1[]="Le fichier n'existe pas";
  • char MsgError2[]="Impossible de mapper le fichier";
  • char MsgError3[]="Impossible de mapper le fichier. Fichier vide ?";
  • char MsgError4[]="Aucun lecteur trouvé. Le programme va se fermer.";
  • char MsgError5[]="Dossier inexistant";
  • char MsgError6[]="L'extension de ce fichier n'autorise pas sa visualisation.";
  • char AboutText[]="Listeur de fichiers pour le concours de programmation sur le forum de SecurityHack\n\nAuteur: Bigbang\nLangage: Win32Cpp\nDernière MAJ: 17 Août 2004\n\nGreetings to:\nCharlotte, Shad0w, P41f0x, Neitsa, Sigma, Nelio, Xiutecutli, le_rasta, Dark-Jedi,\nsn0oPy, Mattwood9, les challenges du BigContest, et tout ceux que j'ai oublié...";
  • char AboutTitle[]="A propos...";
  • /*
  • // English
  • char AppTitle[]="File Browser v1.03 - BiGBANG - Security Hack Contest - 17/08/2004";
  • char AppDisks[]="List of drives:";
  • char AppToList[]="Folder to list :";
  • char AppNumFolders[]="Number of folders :";
  • char AppNumFiles[]="Number of files :";
  • char AppName[]="Name :";
  • char AppFileSize[]="Size";
  • char AppFileCreation[]="Create on the";
  • char AppLastWrite[]="Last write on the";
  • char AppLastAccess[]="Last access on the";
  • char AppDateFormat[]="Date format : dd/mm/yyyy";
  • char SeeFileTitle[]="File Visualisation";
  • char SeeFileCurrentFile[]="Current File";
  • char MsgError1[]="File doesn't exist";
  • char MsgError2[]="File mapping failed";
  • char MsgError3[]="File mapping failed. Maybe the file is empty";
  • char MsgError4[]="0 drives found. Program will end";
  • char MsgError5[]="Folder doesn't exist";
  • char MsgError6[]="The extension of this file doesn't match for visualisation";
  • char AboutText[]="File browser for SecurityHack Programming contest\n\nAuthor: Bigbang\nLanguage: Win32Cpp\nLast update: 17 Août 2004\n\nGreetings to:\nCharlotte, Shad0w, P41f0x, Neitsa, Sigma, Nelio, Xiutecutli, le_rasta, Dark-Jedi,\nsn0oPy, Mattwood9, BigContest's challengers, and all I forgot...";
  • char AboutTitle[]="About...";
  • */
  • /*
  • * Find drive(s) and Fill Combo Box
  • *
  • * Return Value:
  • * number of drive(s)
  • */
  • int __stdcall FillCmbDrives()
  • {
  • DWORD dwResult;
  • int nb=0;
  • char szDrive[]="A:\\";
  • /******** MSDN says : ***************
  • Thee GetLogicalDrives function retrieves a bitmask representing the currently
  • available disk drives.
  • DWORD GetLogicalDrives(void);
  • Parameters
  • This function has no parameters.
  • Return Values
  • If the function succeeds, the return value is a bitmask representing the currently
  • available disk drives. Bit position 0 (the least-significant bit) is drive A,
  • bit position 1 is drive B, bit position 2 is drive C, and so on.
  • ---
  • DRIVE_FIXED The disk cannot be removed from the drive.
  • **************************************/
  • dwResult = GetLogicalDrives();
  • // if(dwResult==0) return 0;
  • while(dwResult!=0)
  • {
  • // only one BYTE
  • if((dwResult&1)&&(GetDriveType(szDrive)==DRIVE_FIXED)) SendMessage(hcmb,CB_ADDSTRING,0,(long)szDrive);
  • szDrive[0]++; // A, B, C, ...
  • nb++;
  • dwResult=dwResult>>1; // shr dwResult, 1
  • }
  • SendMessage(hcmb, CB_SETCURSEL, 0, 0); // selection on first item
  • return nb;
  • }
  • /*
  • * NB: Modified proc seen in MSDN samples
  • *
  • * Get dir, and list files/subdirs
  • * it uses FindFirstFile/FindNextFile method
  • *
  • * Return value : 0 Error
  • * 1 w00t!
  • */
  • int __stdcall ListFiles(HWND hdlg)
  • {
  • WIN32_FIND_DATA FindFileData;
  • HANDLE hFind = INVALID_HANDLE_VALUE;
  • char DirSpec[MAX_PATH]; // directory specification
  • DWORD dwError;
  • char folder[MAX_PATH];
  • HWND hTmp;
  • char number[8];
  • memset(&folder,0,sizeof(folder));
  • memset(&FindFileData,0,sizeof(WIN32_FIND_DATA));
  • memset(&number,0,sizeof(number));
  • nbFiles=0;
  • nbFolders=0;
  • GetDlgItemText(hdlg,ID_TXT_DIR,folder,MAX_PATH); // get current folder
  • strncpy (DirSpec, folder, strlen(folder)+1);
  • if(*(folder+strlen(folder)-1)!='\\') strncat (DirSpec, "\\", 1);
  • strncat (DirSpec, "*", 1);
  • hFind = FindFirstFile(DirSpec, &FindFileData);
  • if (hFind == INVALID_HANDLE_VALUE) return 0;
  • else
  • {
  • // Clear List Boxes
  • SendMessage(hlistFiles, LB_RESETCONTENT, 0, 0);
  • SendMessage(hlistFolders, LB_RESETCONTENT, 0, 0);
  • // First file
  • if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  • {
  • hTmp=hlistFolders;
  • nbFolders++;
  • }
  • else
  • {
  • hTmp=hlistFiles;
  • nbFiles++;
  • }
  • SendMessage(hTmp,LB_ADDSTRING,0,(long)FindFileData.cFileName);
  • while (FindNextFile(hFind, &FindFileData) != 0)
  • {
  • // Next Files
  • if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  • {
  • hTmp=hlistFolders;
  • nbFolders++;
  • }
  • else
  • {
  • hTmp=hlistFiles;
  • nbFiles++;
  • }
  • SendMessage(hTmp,LB_ADDSTRING,0,(long)FindFileData.cFileName);
  • }
  • // Set Numbers Files/Folders numbers
  • itoa(nbFiles,number,10);
  • SetDlgItemText(hdlg,ID_ST_NBFILES,number);
  • itoa(nbFolders,number,10);
  • SetDlgItemText(hdlg,ID_ST_NBFOLDERS,number);
  • dwError = GetLastError();
  • if (dwError == ERROR_NO_MORE_FILES)
  • {
  • FindClose(hFind);
  • return 1;
  • }
  • else
  • {
  • return 0;
  • }
  • }
  • }
  • void __stdcall ChangeFolder(HWND hdlg)
  • {
  • char dir[MAX_PATH];
  • memset(&dir,0,sizeof(dir));
  • char *sz;
  • SendMessage(hlistFolders,LB_GETTEXT,SendMessage(hlistFolders,LB_GETCURSEL,0,0),(long)buf);
  • GetDlgItemText(hdlg,ID_TXT_DIR,dir,sizeof(dir));
  • if(*(dir+strlen(dir)-1)!='\\') strncat(dir, "\\", 1);
  • // different cases
  • if(!strcmp(buf,".")) *(dir+3)=0; // go to root
  • else if(!strcmp(buf,".."))
  • {
  • sz=dir+strlen(dir)-2;
  • while(*sz!='\\') sz--;
  • *sz=0;
  • }
  • else strcat(dir,buf);
  • SetDlgItemText(hdlg,ID_TXT_DIR,dir);
  • // ask for listing THiS folder
  • SendMessage(hdlg,WM_COMMAND,ID_BT_LIST,0);
  • }
  • /*
  • * GetFileExtension
  • */
  • void GetFileExtension(char *szFilename)
  • {
  • char *sz;
  • memset(&FileExt,0,sizeof(FileExt));
  • sz=szFilename+strlen(szFilename)-1;
  • while(*sz!='.') sz--;
  • sz++;
  • strcpy(FileExt,sz);
  • }
  • /*
  • * Extension Filter
  • */
  • BOOL CheckExtension(HWND hdlg)
  • {
  • /*
  • txt,pl,bat,ini,c,cpp,asm << ExtensionsOK
  • ini << bad. continue
  • ini << bad. continue
  • ini << bad. continue
  • ini << w00t. break -> Goto
  • */
  • memset(&CurrentFile,0,sizeof(CurrentFile));
  • SetDlgItemText(hdlg,ID_ST_STATUS,NULL);
  • SendMessage(hlistFiles,LB_GETTEXT,SendMessage(hlistFiles,LB_GETCURSEL,0,0),(long)CurrentFile);
  • GetFileExtension(CurrentFile); //MessageBox(hdlg,FileExt,"FileExt",0);
  • CharLower(FileExt);
  • i=0;c=0;sz=ExtensionsOK;
  • while((c=*sz)!=0)
  • {
  • if(c!=',') *(buf2+i)=*sz;
  • else
  • {
  • //MessageBox(hdlg,buf2,"buf2",0);
  • //MessageBox(hdlg,FileExt,"FileExt",0);
  • if(strcmp(buf2,FileExt)==0) goto _ExtOk;
  • i=-1;
  • memset(&buf2,0,sizeof(buf2));
  • }
  • i++;sz++;
  • }
  • return false;
  • _ExtOk:
  • return true;
  • }
  • BOOL CALLBACK SeeFileProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
  • {
  • switch(mssg)
  • {
  • case WM_INITDIALOG:
  • {
  • HANDLE hMapFile,hfile;
  • LPCTSTR pBuf;
  • // Set title
  • SetWindowText(hdlg,SeeFileTitle);
  • SetDlgItemText(hdlg,ID_ST_CURRENTFILE,SeeFileCurrentFile);
  • memset(&buf,0,sizeof(buf));
  • GetDlgItemText(hMainDlg,ID_TXT_DIR,CurrentFile,sizeof(CurrentFile));
  • strcat(buf,CurrentFile);
  • if(*(buf+strlen(buf)-1)!='\\') { *(buf+strlen(buf))='\\'; *(buf+strlen(buf)+1)='\\'; }
  • memset(&CurrentFile,0,sizeof(CurrentFile));
  • SendMessage(hlistFiles,LB_GETTEXT,SendMessage(hlistFiles,LB_GETCURSEL,0,0),(long)CurrentFile);
  • strcat(buf,CurrentFile);
  • SetDlgItemText(hdlg,ID_TXT_CURRENTFILE,buf);
  • // map the file
  • if((hfile = CreateFile(buf,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0))==INVALID_HANDLE_VALUE)
  • {
  • SetDlgItemText(hdlg,ID_ST_STATUS,MsgError1);
  • return 1;
  • }
  • hMapFile = CreateFileMapping(hfile,NULL,PAGE_READONLY,0,0,0);
  • if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE)
  • {
  • SetDlgItemText(hdlg,ID_ST_STATUS,MsgError2);
  • return 1;
  • }
  • pBuf = (LPTSTR)MapViewOfFile(hMapFile,FILE_MAP_READ,0,0,0);
  • if(pBuf == NULL)
  • {
  • SetDlgItemText(hdlg,ID_ST_STATUS,MsgError3);
  • return 1;
  • }
  • SetDlgItemText(hdlg,ID_TXT_SEEFILE,pBuf);
  • UnmapViewOfFile(pBuf);
  • CloseHandle(hMapFile);
  • CloseHandle(hfile);
  • return 1;
  • }
  • case WM_COMMAND:
  • {
  • switch(LOWORD(wParam))
  • {
  • case ID_BT_CLOSE:
  • {
  • EndDialog(hdlg, 0);
  • return 0;
  • }
  • }
  • return 0;
  • }
  • case WM_CLOSE:
  • {
  • EndDialog(hdlg, 0);
  • return 0;
  • }
  • }
  • return 0;
  • }
  • /*
  • * Sets texts in all Editboxes
  • */
  • void SetStaticsText(HWND hdlg)
  • {
  • SetDlgItemText(hdlg,ID_ST_DISKS,AppDisks);
  • SetDlgItemText(hdlg,ID_ST_TOLIST,AppToList);
  • SetDlgItemText(hdlg,ID_ST_NUMFOLDERS,AppNumFolders);
  • SetDlgItemText(hdlg,ID_ST_NUMFILES,AppNumFiles);
  • SetDlgItemText(hdlg,ID_ST_NAME,AppName);
  • SetDlgItemText(hdlg,ID_ST_FILESIZE,AppFileSize);
  • SetDlgItemText(hdlg,ID_ST_FILECREATION,AppFileCreation);
  • SetDlgItemText(hdlg,ID_ST_LASTWRITE,AppLastWrite);
  • SetDlgItemText(hdlg,ID_ST_LASTACCESS,AppLastAccess);
  • SetDlgItemText(hdlg,ID_ST_DATEFORMAT,AppDateFormat);
  • }
  • /*
  • * Subclassing Proc
  • */
  • LRESULT CALLBACK TxtDirProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
  • {
  • if((mssg==WM_KEYDOWN)&&(wParam == VK_RETURN)) // if pressing VK_RETURN
  • {
  • // list folder
  • SendMessage(hMainDlg,WM_COMMAND,ID_BT_LIST,0);
  • return 0;
  • }
  • return CallWindowProc(oldProc, hwnd, mssg, wParam, lParam); // others messages
  • }
  • BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
  • {
  • switch(mssg)
  • {
  • case WM_INITDIALOG:
  • {
  • hMainDlg=hdlg;
  • // icon
  • SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON1)));
  • // Set Dialog Title
  • SetWindowText(hdlg,AppTitle);
  • SetStaticsText(hdlg);
  • // SubClassing edit ID_TXT_DIR
  • oldProc = (WNDPROC)SetWindowLong(GetDlgItem(hdlg,ID_TXT_DIR),GWL_WNDPROC,(long)TxtDirProc);
  • hcmb=GetDlgItem(hdlg,ID_CB_DRIVES);
  • hlistFiles=GetDlgItem(hdlg,ID_LIST_FILES);
  • hlistFolders=GetDlgItem(hdlg,ID_LIST_FOLDERS);
  • if(FillCmbDrives()==0) // if no drives found
  • {
  • SetDlgItemText(hdlg,ID_ST_STATUS,MsgError4);
  • EndDialog(hdlg, 0);
  • }
  • else
  • {
  • GetDlgItemText(hdlg,ID_CB_DRIVES,buf,sizeof(buf));
  • SetDlgItemText(hdlg,ID_TXT_DIR,buf);
  • }
  • // list root dir
  • SendMessage(hdlg,WM_COMMAND,ID_BT_LIST,0);
  • return 1;
  • }
  • /**** res.rc : **
  • CONTROL 107,ID_BITMAP,"Static",SS_BITMAP,412,7,153,36 < l
  • ^ ^ ^
  • x y L
  • ****************/
  • case WM_LBUTTONDOWN:
  • {
  • if(wParam==MK_LBUTTON)
  • {
  • xPos = LOWORD(lParam);
  • yPos = HIWORD(lParam);
  • /*
  • * (412+153)*1.5 = 848
  • * 412*1.5 = 619
  • * (7+36)*1.5 = 64 << uhuh
  • * 7*1.5 = 11
  • */
  • if((xPos<=848)&&(xPos>=619)&&(yPos<=71)&&(yPos>=11))
  • MessageBox(hdlg,AboutText,AboutTitle,32);
  • }
  • break;
  • }
  • case WM_COMMAND:
  • {
  • switch(LOWORD(wParam))
  • {
  • case ID_LIST_FOLDERS:
  • {
  • switch (HIWORD(wParam))
  • {
  • case LBN_DBLCLK:
  • {
  • ChangeFolder(hdlg);
  • break;
  • }
  • }
  • break;
  • }
  • case ID_LIST_FILES:
  • {
  • switch (HIWORD(wParam))
  • {
  • case LBN_SELCHANGE:
  • {
  • BY_HANDLE_FILE_INFORMATION FilesInfos;
  • SYSTEMTIME SystemTime;
  • HANDLE hfile;
  • DWORD FileSizeHigh,FileSizeLow,
  • __int64 size=0;
  • char buf2[48];
  • memset(&FilesInfos,0,sizeof(LPBY_HANDLE_FILE_INFORMATION));
  • memset(&buf,0,sizeof(buf));
  • memset(&CurrentFile,0,sizeof(CurrentFile));
  • memset(&buf2,0,sizeof(buf2));
  • SetDlgItemText(hdlg,ID_ST_STATUS,NULL);
  • SetDlgItemText(hdlg,ID_ST_FILENAME,NULL);
  • SetDlgItemText(hdlg,ID_ST_SIZE,NULL);
  • SetDlgItemText(hdlg,ID_ST_CREATION,NULL);
  • SetDlgItemText(hdlg,ID_ST_ACCES,NULL);
  • SetDlgItemText(hdlg,ID_ST_WRITTEN,NULL);
  • GetDlgItemText(hMainDlg,ID_TXT_DIR,CurrentFile,sizeof(CurrentFile));
  • strcat(buf,CurrentFile);
  • if(*(buf+strlen(buf)-1)!='\\') { *(buf+strlen(buf))='\\'; *(buf+strlen(buf)+1)='\\'; }
  • memset(&CurrentFile,0,sizeof(CurrentFile));
  • SendMessage(hlistFiles,LB_GETTEXT,SendMessage(hlistFiles,LB_GETCURSEL,0,0),(long)CurrentFile);
  • SetDlgItemText(hdlg,ID_ST_FILENAME,CurrentFile); // set ID_ST_FILENAME
  • strcat(buf,CurrentFile);
  • SetDlgItemText(hdlg,ID_TXT_CURRENTFILE,buf);
  • // Open file
  • if((hfile = CreateFile(buf,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0))==INVALID_HANDLE_VALUE)
  • {
  • SetDlgItemText(hdlg,ID_ST_STATUS,MsgError1);
  • return 0;
  • }
  • // get infos
  • GetFileInformationByHandle(hfile,&FilesInfos);
  • // Get File Size
  • FileSizeLow=GetFileSize(hfile,&FileSizeHigh);
  • size=FileSizeHigh;
  • size<<=8;
  • size+=FileSizeLow;
  • if(size<1000) sprintf(buf2,"%i octets",size); // in octets
  • else if((size/1024)<1000) sprintf(buf2,"%i ko",size/1024); // in ko
  • else sprintf(buf2,"%i Mo",(size/1024)/1024); // in Mo
  • SetDlgItemText(hMainDlg,ID_ST_SIZE,buf2);
  • /*
  • typedef struct _BY_HANDLE_FILE_INFORMATION
  • {
  • DWORD dwFileAttributes;
  • FILETIME ftCreationTime;
  • FILETIME ftLastAccessTime;
  • FILETIME ftLastWriteTime;
  • DWORD dwVolumeSerialNumber;
  • DWORD nFileSizeHigh;
  • DWORD nFileSizeLow;
  • DWORD nNumberOfLinks;
  • DWORD nFileIndexHigh;
  • DWORD nFileIndexLow;
  • } BY_HANDLE_FILE_INFORMATION,
  • *PBY_HANDLE_FILE_INFORMATION;
  • */
  • // ftCreationTime
  • FileTimeToSystemTime(&(FilesInfos.ftCreationTime),&SystemTime);
  • sprintf(buf2,"%02i/%02i/%i",(int)SystemTime.wDay,(int)SystemTime.wMonth,(int)SystemTime.wYear);
  • SetDlgItemText(hMainDlg,ID_ST_CREATION,buf2);
  • // ftLastAccessTime
  • FileTimeToSystemTime(&(FilesInfos.ftLastAccessTime),&SystemTime);
  • sprintf(buf2,"%02i/%02i/%i",(int)SystemTime.wDay,(int)SystemTime.wMonth,(int)SystemTime.wYear);
  • SetDlgItemText(hMainDlg,ID_ST_ACCES,buf2);
  • // ftLastWriteTime
  • FileTimeToSystemTime(&(FilesInfos.ftLastWriteTime),&SystemTime);
  • sprintf(buf2,"%02i/%02i/%i",(int)SystemTime.wDay,(int)SystemTime.wMonth,(int)SystemTime.wYear);
  • SetDlgItemText(hMainDlg,ID_ST_WRITTEN,buf2);
  • // close file
  • CloseHandle(hfile);
  • break;
  • }
  • case LBN_DBLCLK:
  • {
  • if(CheckExtension(hdlg)) // if file as a *good* extension
  • DialogBox(hinst, MAKEINTRESOURCE(IDD_SEEFILE), NULL,SeeFileProc);
  • else
  • SetDlgItemText(hdlg,ID_ST_STATUS,MsgError6);
  • break;
  • }
  • }
  • break;
  • }
  • case ID_CB_DRIVES:
  • {
  • switch (HIWORD(wParam))
  • {
  • case CBN_SELCHANGE:
  • {
  • SendMessage(hcmb,CB_GETLBTEXT,SendMessage(hcmb,CB_GETCURSEL,0,0),(long)buf);
  • SetDlgItemText(hdlg,ID_TXT_DIR,buf);
  • SendMessage(hdlg,WM_COMMAND,ID_BT_LIST,0);
  • break;
  • }
  • }
  • break;
  • }
  • case ID_BT_LIST:
  • {
  • SetDlgItemText(hdlg,ID_ST_STATUS,NULL);
  • if(!ListFiles(hdlg)) SetDlgItemText(hdlg,ID_ST_STATUS,MsgError5);
  • return 0;
  • }
  • case ID_BT_EXIT:
  • {
  • EndDialog(hdlg, 0);
  • return 0;
  • }
  • }
  • return 0;
  • }
  • case WM_CLOSE:
  • {
  • EndDialog(hdlg, 0);
  • return 0;
  • }
  • }
  • return 0;
  • }
  • int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
  • {
  • hinst = hInstance;
  • DialogBox(hInstance, MAKEINTRESOURCE(IDD_APP), NULL, AppDlgProc);
  • return 0;
  • }
/************************************************************************************************

										File Browser v1.03 by BiGBANG
										-----------------------------
						SecurityHack Programming Contest, August 2oo4

  History :
  ---------

	v1.03
		- Filters for visualisation of files
		- Two languages interface : French and English

	v1.02
		- File visualisation. Filter needed

	v1.01
		- Subclassing
		- Numbers of Folders/Files
		- File Informations
		- Bitmap/AboutBox

	v1.00
		- File Browser only :)


************************************************************************************************/

#include <stdio.h>		// sprintf(),...
#include <windows.h>
#include "resource.h"

HINSTANCE hinst;
WNDPROC oldProc;			// orignal proc
HWND hcmb,hlistFiles,hlistFolders,hMainDlg;
char buf[MAX_PATH];
char CurrentFile[MAX_PATH];
char FileExt[8],buf2[8];
char c;
char *sz;
int i;
int xPos,yPos,nbFiles,nbFolders;

// Eextension Filter
char *ExtensionsOK="txt,bat,ini,c,cpp,asm,log,rc,res,dat,";		 // a coma between them
																// a terminal coma

/*
 * Texts
 */
	// French
	char AppTitle[]="Listeur de fichiers v1.03 - BiGBANG - Security Hack Concours - 17/08/2004";
	char AppDisks[]="Liste des lecteurs :";
	char AppToList[]="Répertoire à lister :";
	char AppNumFolders[]="Nombre de dossiers :";
	char AppNumFiles[]="Nombre de fichiers :";
	char AppName[]="Nom :";
	char AppFileSize[]="Taille";
	char AppFileCreation[]="Date de création";
	char AppLastWrite[]="Date de denier écriture";
	char AppLastAccess[]="Date de denier accès";
	char AppDateFormat[]="Format de la date : jj/mm/aaaa";
	char SeeFileTitle[]="Vue de fichiers";
	char SeeFileCurrentFile[]="Fichier en cours";
	char MsgError1[]="Le fichier n'existe pas";
	char MsgError2[]="Impossible de mapper le fichier";
	char MsgError3[]="Impossible de mapper le fichier. Fichier vide ?";
	char MsgError4[]="Aucun lecteur trouvé. Le programme va se fermer.";
	char MsgError5[]="Dossier inexistant";
	char MsgError6[]="L'extension de ce fichier n'autorise pas sa visualisation.";
	char AboutText[]="Listeur de fichiers pour le concours de programmation sur le forum de SecurityHack\n\nAuteur: Bigbang\nLangage: Win32Cpp\nDernière MAJ: 17 Août 2004\n\nGreetings to:\nCharlotte, Shad0w, P41f0x, Neitsa, Sigma, Nelio, Xiutecutli, le_rasta, Dark-Jedi,\nsn0oPy, Mattwood9, les challenges du BigContest, et tout ceux que j'ai oublié...";
	char AboutTitle[]="A propos...";

/*
	// English
	char AppTitle[]="File Browser v1.03 - BiGBANG - Security Hack Contest - 17/08/2004";
	char AppDisks[]="List of drives:";
	char AppToList[]="Folder to list :";
	char AppNumFolders[]="Number of folders :";
	char AppNumFiles[]="Number of files :";
	char AppName[]="Name :";
	char AppFileSize[]="Size";
	char AppFileCreation[]="Create on the";
	char AppLastWrite[]="Last write on the";
	char AppLastAccess[]="Last access on the";
	char AppDateFormat[]="Date format : dd/mm/yyyy";
	char SeeFileTitle[]="File Visualisation";
	char SeeFileCurrentFile[]="Current File";
	char MsgError1[]="File doesn't exist";
	char MsgError2[]="File mapping failed";
	char MsgError3[]="File mapping failed. Maybe the file is empty";
	char MsgError4[]="0 drives found. Program will end";
	char MsgError5[]="Folder doesn't exist";
	char MsgError6[]="The extension of this file doesn't match for visualisation";
	char AboutText[]="File browser for SecurityHack Programming contest\n\nAuthor: Bigbang\nLanguage: Win32Cpp\nLast update: 17 Août 2004\n\nGreetings to:\nCharlotte, Shad0w, P41f0x, Neitsa, Sigma, Nelio, Xiutecutli, le_rasta, Dark-Jedi,\nsn0oPy, Mattwood9, BigContest's challengers, and all I forgot...";
	char AboutTitle[]="About...";
*/



/*
 * Find drive(s) and Fill Combo Box
 * 
 * Return Value:
 *		number of drive(s)
 */
int __stdcall FillCmbDrives()
{
	DWORD dwResult;
	int nb=0;
	char szDrive[]="A:\\";

/******** MSDN says :  ***************
	Thee GetLogicalDrives function retrieves a bitmask representing the currently
	available disk drives.

	DWORD GetLogicalDrives(void);

	Parameters
	This function has no parameters. 
	
	Return Values
	If the function succeeds, the return value is a bitmask representing the currently
	available disk drives. Bit position 0 (the least-significant bit) is drive A,
	bit position 1 is drive B, bit position 2 is drive C, and so on.
---
	DRIVE_FIXED		The disk cannot be removed from the drive.
**************************************/

	dwResult = GetLogicalDrives();
//	if(dwResult==0) return 0;

	while(dwResult!=0)
	{
		//  only one BYTE
		if((dwResult&1)&&(GetDriveType(szDrive)==DRIVE_FIXED))	SendMessage(hcmb,CB_ADDSTRING,0,(long)szDrive);
		szDrive[0]++;				// A, B, C, ...
		nb++;
		dwResult=dwResult>>1;		// shr dwResult, 1
	}

	SendMessage(hcmb, CB_SETCURSEL, 0, 0);		// selection on first item

	return nb;
}

/*
 * NB: Modified proc seen in MSDN samples
 * 
 * Get dir, and list files/subdirs
 * it uses FindFirstFile/FindNextFile method
 *
 * Return value : 0		Error
 *				  1		w00t!
 */
int __stdcall ListFiles(HWND hdlg)
{
	WIN32_FIND_DATA FindFileData;
	HANDLE hFind = INVALID_HANDLE_VALUE;
	char DirSpec[MAX_PATH];  // directory specification
	DWORD dwError;
	char folder[MAX_PATH];
	HWND hTmp;
	char number[8];

	memset(&folder,0,sizeof(folder));
	memset(&FindFileData,0,sizeof(WIN32_FIND_DATA));
	memset(&number,0,sizeof(number));

	nbFiles=0;
	nbFolders=0;

	GetDlgItemText(hdlg,ID_TXT_DIR,folder,MAX_PATH);		// get current folder

	strncpy (DirSpec, folder, strlen(folder)+1);
	if(*(folder+strlen(folder)-1)!='\\')	strncat (DirSpec, "\\", 1);
	strncat (DirSpec, "*", 1);
	
	hFind = FindFirstFile(DirSpec, &FindFileData);

	
	if (hFind == INVALID_HANDLE_VALUE) 	return 0;
	else 
	{
		// Clear List Boxes
		SendMessage(hlistFiles, LB_RESETCONTENT, 0, 0);
		SendMessage(hlistFolders, LB_RESETCONTENT, 0, 0);

		// First file
		if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			hTmp=hlistFolders;
			nbFolders++;
		}
		else
		{
			hTmp=hlistFiles;
			nbFiles++;
		}
		
		SendMessage(hTmp,LB_ADDSTRING,0,(long)FindFileData.cFileName);

		while (FindNextFile(hFind, &FindFileData) != 0) 
		{
			// Next Files
			if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				hTmp=hlistFolders;
				nbFolders++;
			}
			else
			{
				hTmp=hlistFiles;
				nbFiles++;
			}

			SendMessage(hTmp,LB_ADDSTRING,0,(long)FindFileData.cFileName);
		}

		// Set Numbers Files/Folders numbers
		itoa(nbFiles,number,10);
		SetDlgItemText(hdlg,ID_ST_NBFILES,number);
		itoa(nbFolders,number,10);
		SetDlgItemText(hdlg,ID_ST_NBFOLDERS,number);
		
		dwError = GetLastError();
		if (dwError == ERROR_NO_MORE_FILES) 
		{
			FindClose(hFind);
			return 1;
		} 
		else 
		{
			return 0;
		}
	}
}

void __stdcall ChangeFolder(HWND hdlg)
{
	char dir[MAX_PATH];
	memset(&dir,0,sizeof(dir));
	char *sz;

	SendMessage(hlistFolders,LB_GETTEXT,SendMessage(hlistFolders,LB_GETCURSEL,0,0),(long)buf);
	GetDlgItemText(hdlg,ID_TXT_DIR,dir,sizeof(dir));

	if(*(dir+strlen(dir)-1)!='\\')	strncat(dir, "\\", 1);

	// different cases
	if(!strcmp(buf,".")) *(dir+3)=0;	// go to root
	else if(!strcmp(buf,".."))
	{
		sz=dir+strlen(dir)-2;
		while(*sz!='\\') sz--;
		*sz=0;
	}
	else strcat(dir,buf);

	SetDlgItemText(hdlg,ID_TXT_DIR,dir);

	// ask for listing THiS folder
	SendMessage(hdlg,WM_COMMAND,ID_BT_LIST,0);

}

/*
 * GetFileExtension
 */
void GetFileExtension(char *szFilename)
{
	char *sz;
	memset(&FileExt,0,sizeof(FileExt));
	sz=szFilename+strlen(szFilename)-1;
	while(*sz!='.') sz--;
	sz++;
	strcpy(FileExt,sz);
}

/*
 * Extension Filter
 */ 
BOOL CheckExtension(HWND hdlg)
{
	/*

	txt,pl,bat,ini,c,cpp,asm			<< ExtensionsOK

	ini				<< bad. continue
		ini			<< bad. continue
		   ini		<< bad. continue
			   ini	<< w00t. break -> Goto
	 */

	memset(&CurrentFile,0,sizeof(CurrentFile));
	SetDlgItemText(hdlg,ID_ST_STATUS,NULL);

	SendMessage(hlistFiles,LB_GETTEXT,SendMessage(hlistFiles,LB_GETCURSEL,0,0),(long)CurrentFile);
					
	GetFileExtension(CurrentFile);			//MessageBox(hdlg,FileExt,"FileExt",0);
	CharLower(FileExt);
	i=0;c=0;sz=ExtensionsOK;

	while((c=*sz)!=0)
	{
		if(c!=',') *(buf2+i)=*sz;
		else 
		{
			//MessageBox(hdlg,buf2,"buf2",0);
			//MessageBox(hdlg,FileExt,"FileExt",0);

			if(strcmp(buf2,FileExt)==0) goto _ExtOk;
			i=-1;
			memset(&buf2,0,sizeof(buf2));
		}
		i++;sz++;
	}
	return false;
_ExtOk:
	return true;
}


BOOL CALLBACK SeeFileProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
	switch(mssg)
	{
			case WM_INITDIALOG:
			{
				HANDLE hMapFile,hfile;
				LPCTSTR pBuf;

				// Set title
				SetWindowText(hdlg,SeeFileTitle);
				SetDlgItemText(hdlg,ID_ST_CURRENTFILE,SeeFileCurrentFile);

				memset(&buf,0,sizeof(buf));

				GetDlgItemText(hMainDlg,ID_TXT_DIR,CurrentFile,sizeof(CurrentFile));

				strcat(buf,CurrentFile);
				if(*(buf+strlen(buf)-1)!='\\') { *(buf+strlen(buf))='\\'; *(buf+strlen(buf)+1)='\\'; }
				memset(&CurrentFile,0,sizeof(CurrentFile));
				SendMessage(hlistFiles,LB_GETTEXT,SendMessage(hlistFiles,LB_GETCURSEL,0,0),(long)CurrentFile);
				strcat(buf,CurrentFile);
				SetDlgItemText(hdlg,ID_TXT_CURRENTFILE,buf);

				// map the file
				if((hfile = CreateFile(buf,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0))==INVALID_HANDLE_VALUE)
				{
					SetDlgItemText(hdlg,ID_ST_STATUS,MsgError1);
					return 1;
				}

				hMapFile = CreateFileMapping(hfile,NULL,PAGE_READONLY,0,0,0);
				if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE) 
				{ 
					SetDlgItemText(hdlg,ID_ST_STATUS,MsgError2);
					return 1;
				}

				pBuf = (LPTSTR)MapViewOfFile(hMapFile,FILE_MAP_READ,0,0,0);
				if(pBuf == NULL) 
				{ 
					SetDlgItemText(hdlg,ID_ST_STATUS,MsgError3);
					return 1;
				}

				SetDlgItemText(hdlg,ID_TXT_SEEFILE,pBuf);

				UnmapViewOfFile(pBuf);
				CloseHandle(hMapFile);
				CloseHandle(hfile);
				return 1;
			}

		
			case WM_COMMAND:
			{
				switch(LOWORD(wParam))
				{
					case ID_BT_CLOSE:
					{
						EndDialog(hdlg, 0);
						return 0;
					}
				}
				return 0;
			}


			case WM_CLOSE:
			{
				EndDialog(hdlg, 0);
				return 0;
			}
	}
	return 0;
}

/*
 * Sets texts in all Editboxes
 */
void SetStaticsText(HWND hdlg)
{
	SetDlgItemText(hdlg,ID_ST_DISKS,AppDisks);
	SetDlgItemText(hdlg,ID_ST_TOLIST,AppToList);
	SetDlgItemText(hdlg,ID_ST_NUMFOLDERS,AppNumFolders);
	SetDlgItemText(hdlg,ID_ST_NUMFILES,AppNumFiles);
	SetDlgItemText(hdlg,ID_ST_NAME,AppName);
	SetDlgItemText(hdlg,ID_ST_FILESIZE,AppFileSize);
	SetDlgItemText(hdlg,ID_ST_FILECREATION,AppFileCreation);
	SetDlgItemText(hdlg,ID_ST_LASTWRITE,AppLastWrite);
	SetDlgItemText(hdlg,ID_ST_LASTACCESS,AppLastAccess);
	SetDlgItemText(hdlg,ID_ST_DATEFORMAT,AppDateFormat);
	
}


/*
 * Subclassing Proc
 */
LRESULT CALLBACK TxtDirProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
	if((mssg==WM_KEYDOWN)&&(wParam == VK_RETURN))					// if pressing VK_RETURN
	{
		// list folder
		SendMessage(hMainDlg,WM_COMMAND,ID_BT_LIST,0);
		return 0;
	}
	return CallWindowProc(oldProc, hwnd, mssg, wParam, lParam);		// others messages
}

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
	switch(mssg)
	{
			case WM_INITDIALOG:
			{
				hMainDlg=hdlg;

				// icon
				SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON1)));

				// Set Dialog Title
				SetWindowText(hdlg,AppTitle);
				SetStaticsText(hdlg);

				// SubClassing edit ID_TXT_DIR
				oldProc = (WNDPROC)SetWindowLong(GetDlgItem(hdlg,ID_TXT_DIR),GWL_WNDPROC,(long)TxtDirProc);

				hcmb=GetDlgItem(hdlg,ID_CB_DRIVES);
				hlistFiles=GetDlgItem(hdlg,ID_LIST_FILES);
				hlistFolders=GetDlgItem(hdlg,ID_LIST_FOLDERS);

				if(FillCmbDrives()==0)		// if no drives found
				{
					SetDlgItemText(hdlg,ID_ST_STATUS,MsgError4);
					EndDialog(hdlg, 0);
				}
				else
				{
					GetDlgItemText(hdlg,ID_CB_DRIVES,buf,sizeof(buf));
					SetDlgItemText(hdlg,ID_TXT_DIR,buf);
				}
			
				// list root dir
				SendMessage(hdlg,WM_COMMAND,ID_BT_LIST,0);
				
				return 1;
			}

		
/**** res.rc : **

    CONTROL         107,ID_BITMAP,"Static",SS_BITMAP,412,7,153,36 < l
													 ^   ^  ^
													 x   y  L
****************/

			case WM_LBUTTONDOWN:
			{
				if(wParam==MK_LBUTTON)
				{
					xPos = LOWORD(lParam); 
					yPos = HIWORD(lParam);
					
					/*
					 * (412+153)*1.5 = 848
					 *       412*1.5 = 619
					 *    (7+36)*1.5 =  64	<< uhuh
					 *         7*1.5 =  11
					 */

					if((xPos<=848)&&(xPos>=619)&&(yPos<=71)&&(yPos>=11))
						MessageBox(hdlg,AboutText,AboutTitle,32);
				}
				break;
			}


			case WM_COMMAND:
			{
				switch(LOWORD(wParam))
				{
					case ID_LIST_FOLDERS:
					{
						switch (HIWORD(wParam))
						{						
							case LBN_DBLCLK:
							{
								ChangeFolder(hdlg);
								break;
							}
						}

						break;
					}

					case ID_LIST_FILES:
					{
						switch (HIWORD(wParam))
						{		
							
							case LBN_SELCHANGE:
							{
								BY_HANDLE_FILE_INFORMATION FilesInfos;
								SYSTEMTIME SystemTime;
								HANDLE hfile;
								DWORD FileSizeHigh,FileSizeLow,
								__int64 size=0;
								char buf2[48];
								memset(&FilesInfos,0,sizeof(LPBY_HANDLE_FILE_INFORMATION));
								memset(&buf,0,sizeof(buf));
								memset(&CurrentFile,0,sizeof(CurrentFile));
								memset(&buf2,0,sizeof(buf2));
								SetDlgItemText(hdlg,ID_ST_STATUS,NULL);
								SetDlgItemText(hdlg,ID_ST_FILENAME,NULL);
								SetDlgItemText(hdlg,ID_ST_SIZE,NULL);
								SetDlgItemText(hdlg,ID_ST_CREATION,NULL);
								SetDlgItemText(hdlg,ID_ST_ACCES,NULL);
								SetDlgItemText(hdlg,ID_ST_WRITTEN,NULL);

								GetDlgItemText(hMainDlg,ID_TXT_DIR,CurrentFile,sizeof(CurrentFile));
								strcat(buf,CurrentFile);
								if(*(buf+strlen(buf)-1)!='\\') { *(buf+strlen(buf))='\\'; *(buf+strlen(buf)+1)='\\'; }
								memset(&CurrentFile,0,sizeof(CurrentFile));
								SendMessage(hlistFiles,LB_GETTEXT,SendMessage(hlistFiles,LB_GETCURSEL,0,0),(long)CurrentFile);
								SetDlgItemText(hdlg,ID_ST_FILENAME,CurrentFile);	// set ID_ST_FILENAME
								strcat(buf,CurrentFile);
								SetDlgItemText(hdlg,ID_TXT_CURRENTFILE,buf);


								// Open file
								if((hfile = CreateFile(buf,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0))==INVALID_HANDLE_VALUE)
								{
									SetDlgItemText(hdlg,ID_ST_STATUS,MsgError1);
									return 0;
								}

								// get infos
								GetFileInformationByHandle(hfile,&FilesInfos);

								// Get File Size
								FileSizeLow=GetFileSize(hfile,&FileSizeHigh);


								size=FileSizeHigh;
								size<<=8;
								size+=FileSizeLow;

								if(size<1000)				sprintf(buf2,"%i octets",size);				// in octets
								else if((size/1024)<1000)	sprintf(buf2,"%i ko",size/1024);			   // in ko
								else						sprintf(buf2,"%i Mo",(size/1024)/1024);    // in Mo
								
								SetDlgItemText(hMainDlg,ID_ST_SIZE,buf2);

/*
	typedef struct _BY_HANDLE_FILE_INFORMATION
	{
	  DWORD dwFileAttributes;
	  FILETIME ftCreationTime;
	  FILETIME ftLastAccessTime;
	  FILETIME ftLastWriteTime;
	  DWORD dwVolumeSerialNumber;
	  DWORD nFileSizeHigh;
	  DWORD nFileSizeLow;
	  DWORD nNumberOfLinks;
	  DWORD nFileIndexHigh;
	  DWORD nFileIndexLow;
	} BY_HANDLE_FILE_INFORMATION, 
	*PBY_HANDLE_FILE_INFORMATION;
*/								
								// ftCreationTime
								FileTimeToSystemTime(&(FilesInfos.ftCreationTime),&SystemTime);
								sprintf(buf2,"%02i/%02i/%i",(int)SystemTime.wDay,(int)SystemTime.wMonth,(int)SystemTime.wYear);
								SetDlgItemText(hMainDlg,ID_ST_CREATION,buf2);

								// ftLastAccessTime
								FileTimeToSystemTime(&(FilesInfos.ftLastAccessTime),&SystemTime);
								sprintf(buf2,"%02i/%02i/%i",(int)SystemTime.wDay,(int)SystemTime.wMonth,(int)SystemTime.wYear);
								SetDlgItemText(hMainDlg,ID_ST_ACCES,buf2);

								// ftLastWriteTime
								FileTimeToSystemTime(&(FilesInfos.ftLastWriteTime),&SystemTime);
								sprintf(buf2,"%02i/%02i/%i",(int)SystemTime.wDay,(int)SystemTime.wMonth,(int)SystemTime.wYear);
								SetDlgItemText(hMainDlg,ID_ST_WRITTEN,buf2);

								// close file
								CloseHandle(hfile);

								break;
							}
							
							case LBN_DBLCLK:
							{
								if(CheckExtension(hdlg))	// if file as a *good* extension
									DialogBox(hinst, MAKEINTRESOURCE(IDD_SEEFILE), NULL,SeeFileProc);
								else
									SetDlgItemText(hdlg,ID_ST_STATUS,MsgError6);

								break;
							}
						}

						break;
					}

					case ID_CB_DRIVES:
					{
						switch (HIWORD(wParam))
						{
							case CBN_SELCHANGE:
							{
								SendMessage(hcmb,CB_GETLBTEXT,SendMessage(hcmb,CB_GETCURSEL,0,0),(long)buf);
								SetDlgItemText(hdlg,ID_TXT_DIR,buf);
								SendMessage(hdlg,WM_COMMAND,ID_BT_LIST,0);
								break;
							}
						}
						break;

					}
					
					case ID_BT_LIST:
					{
						SetDlgItemText(hdlg,ID_ST_STATUS,NULL);
						if(!ListFiles(hdlg)) SetDlgItemText(hdlg,ID_ST_STATUS,MsgError5);
						return 0;
					}

					case ID_BT_EXIT:
					{
						EndDialog(hdlg, 0);
						return 0;
					}
				}
				return 0;
			}


			case WM_CLOSE:
			{
				EndDialog(hdlg, 0);
				return 0;
			}
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
	hinst = hInstance;
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_APP), NULL, AppDlgProc);
	return 0;

}

 Conclusion

Toutes remarques sont les bienvenues

Bonne journée
Bigbang

 Fichier Zip

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

Télécharger le zip


 Historique

20 août 2004 14:33:45 :

 Sources de la même categorie

Source avec Zip Source avec une capture ID3 TAG COVER ALBUM IMAGE par nanonavich
FILEREADER par FrancoisGauthier
Source avec Zip CLASSE AVANCÉE DE LOG, THREAD SAFE ET DIVERSES SURCHARGES par sboli
Source avec Zip Source avec une capture Source .NET (Dotnet) INFILESEEKER par swonder
Source avec Zip Source avec une capture USB DETECTION par abandonware

Commentaires et avis

Commentaire de magic_Nono le 17/08/2004 18:34:05

pas mal du tt !

Bienvenu sur cpp....

passe dc + svt ici

++
Nono.

Commentaire de eRoZion le 18/08/2004 20:13:55

Très intéressant.
Merci.

Commentaire de darkjedi le 19/08/2004 09:41:55

salut Bigbang ;)
perso sans interférer avec le concours, je dit que c'est très bien ;)
je ne vais pas en dire plus comme je pense etre dans le jury lol
en tout cas je vous tiens au courant de son résultat ;)

Commentaire de thebigbang le 19/08/2004 10:32:04

Merci beaucoup pour ces commentaires, ca fais plaisir

Bonne journée
Bigbang

Commentaire de BruNews le 19/08/2004 11:24:16 administrateur CS

Salut,
dans FillCmbDrives():
if(dwResult==0) return 0; OK
while(dwResult!=0) Inutile ici
commence direct
do {
...
dwResult >>= 1;
} while(dwResult);

Commentaire de thebigbang le 20/08/2004 14:32:39

salut,
C'est vrai ! merci pour la remarque

Bonne journée,
Bigbang

Commentaire de mazix le 22/08/2004 16:52:08

tres cool ,un source tres utile ... bon travail.


                                 .o0M0o.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

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