Gestion (simple) des cookies (win32)

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

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.