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 !

Sujet : icones bureau [ Divers / Général ] (sam20)

mardi 10 juin 2008 à 15:51:46 | icones bureau

sam20

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.

mardi 10 juin 2008 à 20:19:08 | Re : icones bureau

sam20

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?

mardi 10 juin 2008 à 21:49:58 | Re : icones bureau

sam20

Personne....
Excusez moi j'ai croyais etre sur un forum de programmation....



Cette discussion est classé dans : sizeof, lpdata, hprocess, osvi, if


Répondre à ce message

Sujets en rapport avec ce message

EnumProcess Visual C++ 6.0 [ par Steph115 ] Salut j'ai ma fonction comme ceci (j'ai trouver ca dans le msdn explique dans un post par brunews datant de juillet 2003) : // fonction WinMainint API CreateProcess et processus infini [ par Rankin ] Salut à tous,Je suis en train de développer une appli qui lance pas mal de commandes système pour récupérer notamment la configuration du réseau. Pour Aide sur ShowHTMLDialogEx [ par HeavenForsaker ] Bonjour,J'aimerais savoir si il y a un autre moyen que d'utiliser FindWindow pour d'obtenir le handle de la boite de dialogue crée par la fonction Sho [UNIX]1 producteur N consomateurs [ par epmi212 ] bonjour je doit rendre le probleme 1 prducteur N consomateurs la semaine prochaine mais j'ai un probleme de code je vois le probleme est ce que vous aide jeux par C [ par ousous09 ] voila, quand je compile ca me donne cette erreur size of indefined or zero j'ai rien compris voila mon programme en C #include #include #include Fusion de deux fichiers structurés [ par morayma ] J'ai écris un programme en C qui fusionne deux fichiers avec la même structure d'employés et ordonnés par ordre alphabétique croissant des noms. J'ai Pb avec une fonction windows... [ par Steak ] j'ai un petit probleme avec la fonction NT UpdateResource... voila ce que dit le sdk win32 : BOOL UpdateResource( HANDLE hUpdate, // update-file handl PROBLEME POINTEURS [ par zeloveur ] char * saisirChaine(){ int i=0; char *chn; chn=(char *)malloc(sizeof(char)); do { chn[i]=getchar(); chn=(char *)realloc(chn,(++i+1)*sizeof(char)); } long double et VC++ [ par omi ] J'ai un leger probleme avec visual C++ 7.0 .N'y a t'il pas un moyen de lui faire accepter les long double car il les prend pour des double normaux cad taille chaine de char [ par langedechu ] Salut , voila mon prob (je sais plus comment faire) :j'ai une variable : const char *buffer; et j aimerais savoir le nombre de caractere stocker dans


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,250 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é.