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 passage d'argement chaine [ par victorcoasne ] Je fais :int taille(char chaine[]){ cout return (sizeof(chaine)/sizeof(chaine[0])); }int main(){char sizeof bizarre [ par khayyam ] bonjour, j'ai la structure suivante : typedef struct { unsigned char sign1, sign2; unsigned long size_totale, reserve,offset; un Transparence sur fenetre - demande de correction de mon programme [ par elflink ] bonjour à tous et à toutes,voila j'ai créé un petit logiciel qui permet d'appliquer un effet de transparence sur une fenetre via une couleur de transp Pb d'impression [ par cecel ] SalutJe devellope une appli qui permet d'imprimer des etiquettes sur une imprimante ZEBRA.J'utilise un driver "Generic text" car j'imprime un fichier [DirectX]Afficher beaucoup d'objets [ par goutbouyo ] Salut,Je viens de me mettre à directx et j'ai un question.Avec OpenGL on pouvait se faciliter la tâche en créant des displays lists, mais avec directx Socket [ par casper_2 ] Rebonjour,jaimerais savoit,koment pourrai-je me reconecter automatiquement au serveur.ex:je lance mon programme sans ouvrir ma connexion internet.10 s taille d'un tableau dans un sous programme [ par jagui jaguar ] Salut, je cherche a conna^tre la taille de mon tableau une fois qu'il est passé en argument dans un sous programme. Pour l'instant, j'ai cette déclara LPDIRECT3DVERTEXBUFFER9 :: LOCK [ par Adeon ] bonjour a tous, je debute en directx et pour apprendre le fonctionnement je regarde les tortuo ki sont fournis avec le sdk. L'un d'entre eux, (le 2eme smtp en socket [ par XKaliBur ] J'ai essayer de faire le plus simple possible mais ça marche pas... est-ce que quelqu'un aurais une idée... Parce que quand je le fait en telnet ça ma


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,38 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é.