Kod koji sam napravio radi kada se ocitava ListView kontrola u lokalnom programu. Kada prosledim hWnd desktop ListView-a koji pokazuje ikonice na ekranu (window classa mu je SysListView32) popunjava buffer znakovima kao "EEEEE". Jedina razlika kada ova fn radi/neradi je sto je ListView window u drugom pocesu i mozda u unicode konvenciji. Dali je problem u privilegijama procesa ili u unicodu ?
Nije problem da nadjem desktop window i ListView koji pokazuje ikonice. Isto nije problem ni da nadjem aktivni Explorer window i njegov ListView handler. Jedini problem je da ocitam vrednosti.
Svaki kod koji radi mi zavrsava posao (samo da vidim princip) ... jedino da nije .NET ili drugi framework zato sto mi treba funkcija u cistom WinApi-u.
Ovo je funkcija koju sam napravio za ovo. Ulazni parametar je window handler ListView-a
BOOL ReadDesktopSelection(HWND hwnd) // int DeskNo ; char* DeskText // spoljnje
{
LONG ret,len;
LV_ITEM lvi;
char buffer [MAX_PATH];
ret = SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
if(ret < 1)
return FALSE;
DeskNo=ret;
DeskText=new char [ret*MAX_PATH];
DeskText[0]=0;
/*
//ITEM
ret=SendMessage(hwnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
while(ret!=-1)
{
lvi.iItem = (int)ret;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = &buffer[0];
lvi.cchTextMax = MAX_PATH;
len = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM)(LV_ITEM FAR *)&lvi);
lstrcat(DeskText,buffer);
lstrcat(DeskText,",");
ret=SendMessage(hwnd, LVM_GETNEXTITEM, ret, LVNI_SELECTED);
}
*/
//ONLY TEXT
ret=SendMessage(hwnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
while(ret!=-1)
{
// lvi.iItem = (int)ret;
lvi.iSubItem = 0;
// lvi.mask = LVIF_TEXT;
lvi.pszText = &buffer[0];
lvi.cchTextMax = MAX_PATH;
len = SendMessage(hwnd, LVM_GETITEMTEXT, (WPARAM)ret, (LPARAM)(LV_ITEM FAR *)&lvi);
lstrcat(DeskText,buffer);
lstrcat(DeskText,",");
ret=SendMessage(hwnd, LVM_GETNEXTITEM, ret, LVNI_SELECTED);
}
//
if(lstrlen(DeskText)>0)
DeskText[lstrlen(DeskText)-1]=0; // sklanjam zadnji zarez
::MessageBox(0, DeskText ,"SelectedItems",MB_OK);
return TRUE;
}