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 !

GESTION (SIMPLE) DES COOKIES (WIN32)


Information sur la source

Catégorie :Divers Niveau : Initié Date de création : 09/07/2003 Date de mise à jour : 09/07/2003 20:06:19 Vu / téléchargé: 2 347 / 124

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


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

  • #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;
  • }
#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;
}

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

Commentaires et avis

signaler à un administrateur
Commentaire de aardman le 09/07/2003 20:11:26

J'ai oublier de dire que les commentaires sont les bienvenues.

signaler à un administrateur
Commentaire de BruNews le 09/07/2003 20:30:57 administrateur CS

Bon travail, y a pas grand chose a dire de plus.

signaler à un administrateur
Commentaire de aardman le 09/07/2003 21:11:56

Merci!

signaler à un administrateur
Commentaire de Kirua le 10/07/2003 18:39:28

et ce serait encore mieux si tu en faisais une classe utilisable dans un projet avec interface graphique. histoire d'être facilement implémenté :-)

signaler à un administrateur
Commentaire de aardman le 10/07/2003 18:52:10

je vois ce que tu veux dire Kirua, mais les classes et l'orienté objet en general je m'y connais pas assez pour faire ce que tu dis. Dans un petit moment, peut etre, quand j'aurais le niveau :)
Merci pour le commentaire.

signaler à un administrateur
Commentaire de Kirua le 10/07/2003 19:39:47

http://glouise.developpez.com/classes.htm
:-) c fou ce que ça facilite la vie, je n'utilise plus que ça. mets-toi y vite !

signaler à un administrateur
Commentaire de aardman le 11/07/2003 20:48:33

Merci pour le lien j'irais jetter un coup d'oeil :)

signaler à un administrateur
Commentaire de Kwantom le 04/01/2005 20:44:50

Projet intéressent, mais la structure du code laisse à désirer.

Code difficile à déchiffrer

6/10

signaler à un administrateur
Commentaire de Kirua le 10/01/2005 17:29:01

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

signaler à un administrateur
Commentaire de Alain Proviste le 26/05/2005 00:03:56 administrateur CS

BON TRAVAIL L'AMI :D

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.