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.
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.