Suppression fichier temp [demande forum]

Contenu du snippet

Source en reponse à une demande du forum
Developpé avec Borland c++ builder
Affiche une barre de progression pendant la suppresion des fichier temporaire windows et IE ainsi que les cookies du profil windows en cours.

Je pense pas qu'il fonctionne sous 95, dans tous les cas je pense que les resultat doivent etre imprevisible, j'ai donc empecher le prog de s'executer sous win 9x. Si certains peuvent le tester merci.

Source / Exemple :


//---------------------------------------------------------------------------

#include <clx.h>
#include <windows.h>
#include <stdio.h>
#include <commctrl.h>           //Necessaire pour la classe PROGRESS_CLASS
                                //Chargée avec InitCommonControlsEx
#pragma comment ( lib , "C:\Program Files\Borland\CBuilder6\Lib\Psdk\comctl32.lib" )
#pragma comment ( lib , "C:\Program Files\Borland\CBuilder6\Lib\Psdk\kernel32.lib" )

HWND g_hwndWin ;        //Handle de la fenetre
HWND hwndProgressBar ;  //Handle de la ProgressBar
TCHAR * g_szTitle = TEXT ( "En cours..." ) ,
                              //Nom de la fenetre principale

  • g_szClassName = TEXT ( "WindowsClass" ) ;
//Nom de la class de la fenetre principale //--------------------------------------------------------------------------- // Déclaration des fonctions LRESULT CALLBACK WndProc ( HWND f_hwnd , UINT f_msg , WPARAM f_wParam , LPARAM f_lParam ) ; bool NT_Ou_Plus ( void ) ; //Test si le poste est sous NT ou plus void fSupp_Files ( char f_Rep [ 512 ] ) ; //Suppression récursive des fichiers d'un repertoire /*********************************************************************** FONCTION: WinMain BUT: Fonction pricinpal appeler en premier The WinMain function of the application. It is called by the system as the initial entry point for this Windows CE-based application.
                                                                                                                                              • /
int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int iCmdShow ) { //Declaration des variables locales g_hwndWin = hInstance ; MSG msg ; //Contiendra les messages int iSpacing ; //Controls the size of the progress bar. INITCOMMONCONTROLSEX iccInit; //Structure de la ProgressBar RECT rcClient ; //Coordonnees de la fenetre [(0,0) , (right,bottom)] char Temp [ 256 ] , Temp_IE [ 256 ] , Cookies [ 256 ] ; HKEY hKey ; unsigned long Size = sizeof ( Temp_IE ) ; //Pour stocker la structure de la class WNDCLASS WndClass ; if ( NT_Ou_Plus ( ) == FALSE ) { MessageBox ( NULL , "Vous devez executer Windows NT ou superieur pour utiliser ce programme." , "Erreur réparation intranex" , NULL ) ; return FALSE ; } //Creation de la class WndClass.style = CS_HREDRAW | CS_VREDRAW ; //Style de la class WndClass.lpfnWndProc = ( WNDPROC ) WndProc ; //Adresse de la procedure qui va recevoir les messages WndClass.cbClsExtra = NULL ; //Optionnel WndClass.cbWndExtra = NULL ; //Optionnel WndClass.hIcon = LoadIcon( NULL , IDI_WINLOGO ) ; WndClass.hInstance = hInstance ; WndClass.hCursor = NULL ; WndClass.hbrBackground = ( HBRUSH ) GetStockObject ( LTGRAY_BRUSH ) ; WndClass.lpszMenuName = NULL ; WndClass.lpszClassName = g_szClassName ; //Nom de la classe //Enregistrement de la classe RegisterClass ( &WndClass ) ; g_hwndWin = CreateWindow ( g_szClassName , // Registered class name g_szTitle , // Nom de la fenetre WS_OVERLAPPED | WS_SYSMENU , // Window style 200 , // Position horizontal de la fenetre 200 , // Position vertical de la fenetere 300 , // Largeur de la fenetre 100 , // Hauteur de la fenetre NULL , // Handle de la fenetre parent NULL , // Handle du menu ou d'une fenetre enfant NULL , // Ignoré sur Windows NT, 2000 et XP NULL ) ; // Necessaire pour des applications multi-fenetre //Initialisation et chargement du control ProgressBar iccInit.dwSize = sizeof ( iccInit ) ; iccInit.dwICC = ICC_PROGRESS_CLASS ; InitCommonControlsEx ( &iccInit ) ; //Create the window for the progress bar. //Recuperation des coordonnees de la fenetre principale GetClientRect( g_hwndWin , &rcClient ) ; //Definition de la taille de la ProgressBar iSpacing = ( int ) ( 0.05 * ( rcClient.right - rcClient.left ) ) ; //Creation de la fenetre hwndProgressBar = CreateWindowEx( 0 , PROGRESS_CLASS, TEXT( "Progess Bar" ) , WS_CHILD | WS_VISIBLE , rcClient.left + iSpacing , ( int ) ( ( rcClient.bottom - rcClient.top ) / 2 - iSpacing / 2 ) , rcClient.right - 2 * iSpacing , iSpacing , g_hwndWin , NULL , hInstance , NULL ) ; // Affiche la ProgressBar ShowWindow ( g_hwndWin , iCmdShow ) ; // UpdateWindow ( g_hwndMain ) ; // Configuration du range et de l'increment de la ProgressBar SendMessage( hwndProgressBar , PBM_SETRANGE , 0 , MAKELPARAM ( 0 , 100 ) ) ; SendMessage( hwndProgressBar , PBM_SETSTEP , MAKEWPARAM ( 1 , 0 ) , 0 ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; //Ouverture de la base de registre //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; RegOpenKeyEx ( HKEY_CURRENT_USER , "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" , NULL , KEY_QUERY_VALUE , &hKey ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; //Supression des fichiers //Suppression du repertoire client //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; // fSupp_Files ( "c:\\Program Files\\Intranex\\" ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; //Suppression du repertoire temp //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; GetTempPath ( 256 , Temp ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; fSupp_Files ( Temp ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; //Suppression des temporaires IE //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; RegQueryValueEx ( hKey , "Cache" , NULL , NULL , ( LPBYTE ) &Temp_IE , &Size ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; strcat ( Temp_IE , "\\" ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; fSupp_Files ( Temp_IE ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; //Suppression des Cookies //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; RegQueryValueEx ( hKey , "Cookies" , NULL , NULL , ( LPBYTE ) &Cookies , &Size ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; strcat ( Cookies , "\\" ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; fSupp_Files ( Cookies ) ; //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; //Configuration de IE via la base de registre //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; //Fermeture de la base de registre RegCloseKey ( hKey ) ; return msg.wParam ; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //Suppression récursive des fichiers d'un repertoire void fSupp_Files ( char f_Rep [ 512 ] ) { //Déclaration des variables char f_Chemin [ 512 ] ; WIN32_FIND_DATA wData ; HANDLE f_Find ; //Initialisation des variables //Ajout de *.* f_Chemin sprintf ( f_Chemin , "%s*.*" , f_Rep) ; //Initialisation du Handle de recherche de fichiers f_Find = FindFirstFile(f_Chemin, &wData); //Suppresion de *.* a f_Chemin strcpy ( f_Chemin , f_Rep ) ; if ( f_Find != INVALID_HANDLE_VALUE) { do { if ( ( strcmp (wData.cFileName , "..") ) && ( strcmp (wData.cFileName, ".") ) ) { if ( wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { //puisque c'est un repertoire, on recupere la nouvelle adresse, et on va rentrer dedans... sprintf ( f_Chemin , "%s%s\\", f_Rep , wData.cFileName ) ; //On rappelle la fonction pour qu'elle supprime les fichiers du répèrtoire fSupp_Files ( f_Chemin ) ; //Suppression du repertoire une foi tous les fichiers du repertoire supprimés //Increment la barre de progression SendMessage ( hwndProgressBar , PBM_STEPIT , 0 , 0 ) ; RemoveDirectory ( f_Chemin ) ; //MessageBox ( NULL, f_Chemin , "Supression rep" , NULL ) ; // reviens un repertoire en arriere int j = strlen ( f_Chemin ) - 2 ; while ( j > 0 ) { if ( f_Chemin [ j ] == '\\' ) { f_Chemin [ j+1 ] = '\0' ; break ; } j -- ; } } else // ce n'est pas un répèrtoire donc le fichier est supprimé sprintf ( f_Chemin , "%s%s" , f_Rep , wData.cFileName ) ; DeleteFile ( f_Chemin ) ; } } while ( FindNextFile ( f_Find , &wData ) ) ; } FindClose( f_Find ); } //--------------------------------------------------------------------------- /*********************************************************************** FONCTION: WndProc BUT: Fonction qui va recevoire les messages envoyes a la fenetre.
                                                                                                                                              • /
LRESULT CALLBACK WndProc ( HWND f_hwnd , UINT f_msg , WPARAM f_wParam , LPARAM f_lParam ) { switch ( f_msg ) { // Add cases such as WM_CREATE, WM_COMMAND, WM_PAINT if you don't // want to pass these messages along for default processing. //Lorsque l'utilisateur ferme la fenêtre via le menu système case WM_CLOSE : //Envoi le message pour quitter le programme DestroyWindow ( f_hwnd ) ; return 0 ; //Lors de la destruction de la fenetre case WM_DESTROY : //Optionnel PostQuitMessage ( 0 ) ; return 0 ; } return DefWindowProc ( f_hwnd , f_msg , f_wParam , f_lParam ) ; } //--------------------------------------------------------------------------- /* //--------------------------------------------------------------------------- // Fonction pour récupérer le msg d'erreur // Récupère le numero de l'erreur, message associé et log dans un fichiet log // avec un commentaire passé en argument. // Le fichier de log est transmit immédiatement apres ecriture sur un FTP void fError_Msg ( DWORD f_Error_Num , // Numéro de l'erreur renvoye pas la dernière operation char f_Msg_Log [1024] ) // Message d'erreur a mettre ds le fichier log { // Déclaration et initialisation des variables LPVOID f_Msg_Buffer ; //Necessaire à FORMAT_MESSAGE_ALLOCATE_BUFFER FILE * log ; // Ouverture du fichier en mode ajout log = fopen ( "c:\\intranex.log" , "a" ) ; // Récupération du message d'erreure FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM , NULL , f_Error_Num , MAKELANGID ( LANG_NEUTRAL , SUBLANG_DEFAULT ) , (LPTSTR) &f_Msg_Buffer ,NULL , NULL ) ; // Ecriture du message d'erreur dans le fichier fprintf ( log , "Erreur %d, %s\n%s\n\n\n" , f_Error_Num , f_Msg_Buffer , f_Msg_Log) ; // Libération des objects LocalFree( f_Msg_Buffer ) ; fclose ( log ) ; } //---------------------------------------------------------------------------
  • /

Conclusion :


Si vous avez des idées de choses à rajouter dans ce programme qui a pour vocation de remettre en état n'importe quel poste qi rencontre de pb de navigation internet avec IE.

Si certain peuve le tester sur win 9x Merci de me tenire au courant.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.