cs_sam20
Messages postés184Date d'inscriptionlundi 31 juillet 2006StatutMembreDernière intervention26 mai 2016
-
10 juin 2008 à 15:51
cs_sam20
Messages postés184Date d'inscriptionlundi 31 juillet 2006StatutMembreDernière intervention26 mai 2016
-
10 juin 2008 à 21:49
Bonjour .
Avec ce code j'ai la liste des icones du bureau
//-----------------------------------------------------------------------------------
// 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;
//-----------------------------------------------------------------------------------
// 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);
}
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.