Gestion (simple) des cookies (win32)

Soyez le premier à donner votre avis sur cette source.

Vue 4 089 fois - Téléchargée 254 fois

Description

Un petit programme pour supprimer ses cookies.
On peut choisir quels cookie ne pas supprimer.
Au prochain lancement, le prog se souvient des cookies non effacés.
c'est tout.

Attention: ecriture d'une key dans "HKEY_CURRENT_USER\SOFTWARE\GestionDesCookies"
Si vous testez le prog, pensez a la supprimer apres.

Source / Exemple :


#include <windows.h>
#include "resource.h"

HWND hList1;
HWND hList2;
HWND hButtonToRight;
HWND hButtonToLeft;
char szCookieDirectory[256];
int iIndex, iCount;

BOOL CALLBACK AppDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
int LoadCookies(HWND hList1, HWND hList2); // charge les noms des cookies aux bons endroits
int DeleteCookies(void);
int TransferIndex(int iIndex, HWND hListFrom, HWND hListTo); // passe une ligne d'une listbox a une autre
int GetCookieDirectory(char * szCookiePath); 
int UpdateRegistry(void); // sauvegarde

BOOL CALLBACK AppDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg) 
 {
   case WM_INITDIALOG:
	   hList1 = GetDlgItem(hDlg, IDC_LIST1);
	   hList2 = GetDlgItem(hDlg, IDC_LIST2);
	   hButtonToRight = GetDlgItem(hDlg, IDC_TO_RIGHT);
	   hButtonToLeft  = GetDlgItem(hDlg, IDC_TO_LEFT);
	   SendMessage(hList1, LB_RESETCONTENT, 0, 0);
	   SendMessage(hList2, LB_RESETCONTENT, 0, 0);
	   LoadCookies(hList1, hList2);
    return 1;
   case WM_COMMAND:
    switch(LOWORD(wParam)) 
      {
	  case IDC_LIST1: // ListBox des cookies a effacer (gauche)
		  switch(HIWORD(wParam))
		  {
		  case LBN_DBLCLK:
			  TransferIndex(SendMessage(hList1, LB_GETCURSEL, 0, 0), hList1, hList2);
			  return 0;
		  case LBN_SETFOCUS:
			  EnableWindow(hButtonToLeft, FALSE);
			  EnableWindow(hButtonToRight, TRUE);
			  return 0;
		  }
	  return 0;
	  case IDC_LIST2: // ListBox des cookie a sauvegarder (droite)
		  switch(HIWORD(wParam))
		  {
		  case LBN_DBLCLK:
			  TransferIndex(SendMessage(hList2, LB_GETCURSEL, 0, 0), hList2, hList1);
			  return 0;
		  case LBN_SETFOCUS:
			  EnableWindow(hButtonToRight, FALSE);
			  EnableWindow(hButtonToLeft, TRUE);
			  return 0;
		  }
	  return 0;
	  case IDC_TO_RIGHT: // button List1 => List2
		  switch(HIWORD(wParam))
		  {
		  case BN_CLICKED:
			  TransferIndex(SendMessage(hList1, LB_GETCURSEL, 0, 0), hList1, hList2);
			  return 0;
		  }
	  return 0;
	  case IDC_TO_LEFT: // button List1 <= List2
		  switch(HIWORD(wParam))
		  {
		  case BN_CLICKED:
			  TransferIndex(SendMessage(hList2, LB_GETCURSEL, 0, 0), hList2, hList1);
			  return 0;
		  }
	  return 0;
		  case IDC_SUPPR:
			  if(HIWORD(wParam)==BN_CLICKED && SendMessage(hList1, LB_GETCOUNT, 0, 0)){
				  if(IDYES==MessageBox(0, "Etes vous sur de vouloir supprimer les cookies contenus dans la colone de gauche ?","Cookies", MB_YESNO))
				  DeleteCookies();}
			  return 0;
	  case IDC_QUITTER:
	  case IDCANCEL:
		  if(SendMessage(GetDlgItem(hDlg, IDC_CHECK), BM_GETCHECK, 0, 0)) 
			  UpdateRegistry();
		  EndDialog(hDlg, 0);
	}
 }
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
GetCookieDirectory(szCookieDirectory);
DialogBox(hInstance, "MainDialog", 0, AppDlgProc);
return 0;
}

int LoadCookies(HWND hList1, HWND hList2)
{
	HKEY hKeyRead;
	HANDLE hFile;
	WIN32_FIND_DATA FileInfo;
	int i = 0; // index, nombre de cookie lus dans la base de registre
	char szValueName[256];
	char szCookieName[256];
	char szSearchPath[256];
	DWORD dwValueNameLen = 256;
	DWORD dwCookieNameLen = 256;
	// on charge les cookie de la base de registre vers la ListBox de droite
	RegOpenKeyEx(HKEY_CURRENT_USER,"SOFTWARE\\GestionDesCookies", 0, KEY_ALL_ACCESS, &hKeyRead);
	if(hKeyRead) 
	while(RegEnumValue(hKeyRead, i, szValueName, &dwValueNameLen, NULL, NULL, 
	                   (unsigned char *) szCookieName, &dwCookieNameLen)!=ERROR_NO_MORE_ITEMS){
	SendMessage(hList2, LB_ADDSTRING, 0, (WPARAM) szCookieName);
	dwValueNameLen = 256;
	dwCookieNameLen = 256;
	i++;}
	// puis les cookies du rep de l'utilisateur (sauf seux qui sont deja dans la list box de droite)
	strcpy(szSearchPath, szCookieDirectory);
	strcat(szSearchPath, "*.txt");
	hFile = FindFirstFile(szSearchPath, &FileInfo);
	if(hFile == INVALID_HANDLE_VALUE) return 0;
	do
	{
		// boucle avec j pour verifier que le cookie n'est pas deja dans la listbox de droite
		for(int j = 0; j <= i; j++){  
			SendMessage(hList2, LB_GETTEXT, j, (WPARAM) szCookieName);
			if(strcmp(szCookieName, FileInfo.cFileName)==0) break;
			if(j==i) SendMessage(hList1, LB_ADDSTRING, 0, (WPARAM) FileInfo.cFileName);}
	}while(FindNextFile(hFile, &FileInfo));
FindClose(hFile);
RegCloseKey(hKeyRead);
return 0;
}

int DeleteCookies(void)
{
	char szCookiePath[256];
	char szCookieName[256];
	iCount = SendMessage(hList1, LB_GETCOUNT, 0, 0);
	for(int i = 0; i < iCount; i++){
		strcpy(szCookiePath, szCookieDirectory);
		SendMessage(hList1, LB_GETTEXT, i, (LPARAM) szCookieName);
		strcat(szCookiePath, szCookieName);
		DeleteFile(szCookiePath);}
	SendMessage(hList1, LB_RESETCONTENT, 0, 0);
return 0;
}

int TransferIndex(int iIndex, HWND hListFrom, HWND hListTo)
{
	char szBuffer[256];
	iCount = SendMessage(hListFrom, LB_GETCOUNT, 0, 0);
	if(!iCount || iIndex<0) return 0;
	SendMessage(hListFrom, LB_GETTEXT, iIndex, (LPARAM)szBuffer);
	SendMessage(hListTo, LB_ADDSTRING, 0, (LPARAM)szBuffer);
	SendMessage(hListFrom, LB_DELETESTRING, iIndex, 0);
	if(iIndex+1 >= iCount) iIndex-=1;
	if(iIndex>=0) SendMessage(hListFrom, LB_SETCURSEL, iIndex, 0);
return 0;
}

int GetCookieDirectory(char * szCookiePath)
{
	HKEY hKey;
	DWORD dwLenth;
	RegOpenKey(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\", &hKey); 
	RegQueryValueEx(hKey, "Cookies", NULL, NULL, (unsigned char *) szCookiePath, &dwLenth);
	if(szCookiePath[strlen(szCookiePath)-1]!='\\') strcat(szCookiePath, "\\");
RegCloseKey(hKey);
return 0;
}

int UpdateRegistry(void)
{
	HKEY hKeyCookie;
	int iNewCookie = 0;
	int iOldCookie = 0;
	char szIndex[4];  // iNewCookie ou iOldCookie en version char
	char szBuffer[256];
	DWORD dwBufLen;
	iNewCookie = SendMessage(hList2, LB_GETCOUNT, 0, 0);
	RegCreateKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\GestionDesCookies", 0, NULL, REG_OPTION_NON_VOLATILE,
			       KEY_ALL_ACCESS, NULL, &hKeyCookie, NULL);
	// on efface toutes les valeurs
	while(RegEnumValue(hKeyCookie, iOldCookie++, szBuffer, &dwBufLen, NULL, NULL, NULL, NULL)!=ERROR_NO_MORE_ITEMS);
	while(1){
		if(iOldCookie < 0) break;
		itoa(iOldCookie, szIndex, 10);
		RegDeleteValue(hKeyCookie, szIndex);
		iOldCookie--;}
	// on remplis avec les nouvelles valeurs
	while(iNewCookie > 0){
		SendMessage(hList2, LB_GETTEXT, iNewCookie-1, (WPARAM) szBuffer);
		dwBufLen = strlen(szBuffer)+1;
		itoa(iNewCookie-1, szIndex, 10);
		RegSetValueEx(hKeyCookie, szIndex, 0, REG_SZ,(unsigned char *) szBuffer, dwBufLen);
		iNewCookie--;}
RegCloseKey(hKeyCookie);
return 0;
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Alain Proviste
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
1 -
BON TRAVAIL L'AMI :D
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
"http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/regqueryvalueex.asp"

RegQueryValueEx(hKey, "Cookies", NULL, NULL, (unsigned char *) szCookiePath, &dwLenth);
if(szCookiePath[strlen(szCookiePath)-1]!='\\') strcat(szCookiePath, "\");

tu appelles strlen() sur szCookiePath, mais dwLenth contient déjà la longueur des données copiées, ce serait plus rapide de réutiliser cette variable AMHA.
Kwantom
Messages postés
2
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
11 janvier 2005
-
Projet intéressent, mais la structure du code laisse à désirer.

Code difficile à déchiffrer

6/10
cs_aardman
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2 -
Merci pour le lien j'irais jetter un coup d'oeil :)
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
http://glouise.developpez.com/classes.htm
:-) c fou ce que ça facilite la vie, je n'utilise plus que ça. mets-toi y vite !

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.