Icones bureau

Signaler
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
-
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
-
Bonjour .
Avec ce code j'ai la liste des icones du bureau

void GetIcon(){
 // récupération plateforme d'exécution
 OSVERSIONINFO osvi;
 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 GetVersionEx(&osvi);
 if(osvi.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS &&
 osvi.dwPlatformId != VER_PLATFORM_WIN32_NT)
 {
 return;
 }

 //-----------------------------------------------------------------------------------
 // récupération ListView avec les icones du bureau, récupération de son processus
 HWND hWnd = FindWindow(_T("ProgMan"), NULL);
 HWND hListView = GetTopWindow(GetTopWindow(hWnd));
 DWORD dwProcessId;
 GetWindowThreadProcessId(hListView, &dwProcessId);
 DWORD dwAccess = PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE;
 HANDLE hProcess = OpenProcess(dwAccess, FALSE, dwProcessId);
 if(hProcess == NULL)
 return;

 // allocation d'une chaînes de caractères, d'une stucture LVITEM et d'une structure
 // POINT dans le processus de la listview ou dans la zone partagée (Windows 98)
 DWORD dwSize = sizeof(POINT) + sizeof(LVITEM) + 256*sizeof(TCHAR);
 HANDLE hFileMapping = NULL;
 LPVOID lpData = NULL;

// Windows 98 : création FileMapping
 if(osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
 {
 hFileMapping = CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL,
 PAGE_READWRITE|SEC_COMMIT, 0, dwSize, NULL);
 if(hFileMapping != NULL)
 lpData = MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, dwSize);
 }

 // Windows NT : VirtualAllocEx
 if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
 {
 lpData = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);
 }

// en cas d'erreur
 if(lpData == NULL)
 {
 if(hFileMapping != NULL)
 CloseHandle(hFileMapping);
 CloseHandle(hProcess);
 return;
 }

 // affectation des pointeurs
 LPVOID lpPosition = lpData;
 LPVOID lpItem = ((LPBYTE) lpData) + sizeof(POINT);
 LPVOID lpText = ((LPBYTE) lpData) + sizeof(POINT) + sizeof(LVITEM);

 //-----------------------------------------------------------------------------------
 // création nom du fichier d'initialisation
 TCHAR szIniFileName[_MAX_PATH];
 GetModuleFileName(NULL, szIniFileName, _MAX_PATH);
 GetLongPathName(szIniFileName, szIniFileName, _MAX_PATH);
 PathRenameExtension(szIniFileName, _T(".ini"));

 // boucle sur les items de la ListView
 int nItemCount = SendMessage(hListView, LVM_GETITEMCOUNT, 0, 0);
 TCHAR szCount[32];
 wsprintf(szCount, _T("%d"), nItemCount);
 WritePrivateProfileString(_T("Icons"), _T("ItemCount"), szCount, szIniFileName);
 for(int i = 0; i < nItemCount; i++)
 {
 // init structure LVITEM dans une variable locale et recopie dans la zone de
 // mémoire allouée
 LVITEM lvi;
 ZeroMemory(&lvi, sizeof(LVITEM));
 lvi.iItem = i;
 lvi.iSubItem = 0;
 lvi.mask = LVIF_TEXT;
 lvi.pszText = (LPTSTR) lpText;
 lvi.cchTextMax = 256;
 WriteProcessMemory(hProcess, lpItem, &lvi, sizeof(LVITEM), NULL);
lvi.iImage
 // récupération nom et position
 SendMessage(hListView, LVM_GETITEMTEXT, i, (LPARAM) lpItem);
 SendMessage(hListView, LVM_GETITEMPOSITION, i, (LPARAM) lpPosition);

 // recopie dans variables locales
 TCHAR szText[256];
 ReadProcessMemory(hProcess, lpText, szText, 256*sizeof(TCHAR), NULL);
 POINT ptPosition;
 ReadProcessMemory(hProcess, lpPosition, &ptPosition, sizeof(POINT), NULL);

 // ajout de la position et du nom
 TCHAR szKey[256];
 wsprintf(szKey, _T("Item%02d"), i);
 TCHAR szValue[256];
 wsprintf(szValue, _T(""%s" %d %d"), szText, ptPosition.x, ptPosition.y);
 WritePrivateProfileString(_T("Icons"), szKey, szValue, szIniFileName);
 }

 //-----------------------------------------------------------------------------------
 // libération mémoire
 if(osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
 {
 UnmapViewOfFile(lpData);
 CloseHandle(hFileMapping);
 }
 if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
 {
 VirtualFreeEx(hProcess, lpData, 0, MEM_RELEASE);
 }

 // fermeture processus
 CloseHandle(hProcess);
 MessageBox(Desk, _T("Position des icones sauvegardée"),
 _T("DektopUtility"), MB_ICONINFORMATION);
 }

Cela marche j'ai les noms et les positions de chaques icones.
Je voudrai savoir s'il serait possible d'avoir les images des icones (les mettre dans un HBITMAP par exemple).
Merci a vous.

2 réponses

Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Personne....
J'ai trouvé ceci:
HIMAGELIST HI;
 HI=(HIMAGELIST)SendMessage(hListView,LVM_GETIMAGELIST,(WPARAM)LVSIL_NORMAL,0);

Cela creer t'il une liste d'images de mes icones?
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Personne....
Excusez moi j'ai croyais etre sur un forum de programmation....