Witam!
Chciałem napisać program podobny do tego, jaki jest dostarczany z kartami graficznymi Matroxa. Otóż zapamiętuje on położenie ikon na pulpicie i po nieprawidłowym wyjściu z Windows (na przykład po kopnięciu w guzik reset ;) ) ustawia je tak, jak były tuż przed niefortunnym wypadkiem.
Napisałem taki oto kod:
<font face="Courier New">
bool __stdcall CallBackFunc(HWND hwnd, LPARAM lParam)
{char nazwa[200];
GetClassName(hwnd, nazwa, 199);
if (!strcmp(nazwa, "SysListView32"))
{Uchwyt = hwnd;
return false;
}
return true;
}
*---------------------------------------------------------------------------
void __fastcall TForm1::ZapamietajClick(TObject *Sender)
{LV_ITEM item;
int index;
POINT pt;
char nazwa[256];
handle = FindWindow("Progman", NULL); *"Program Manager"
if (handle)
EnumChildWindows(handle, (WNDENUMPROC)CallBackFunc,1);
if (Uchwyt)
while ((index = SendMessage(Uchwyt, LVM_GETNEXTITEM, 1, LVNI_ALL)) != -1)
{SendMessage(Uchwyt, LVM_GETITEMPOSITION, index, long(&pt));
item.iItem = index;
item.iSubItem = 0;
item.pszText = nazwa;
item.cchTextMax = 255;
SendMessage(Uchwyt, LVM_GETITEM, 0, long(&item));
Memo1->Lines->Add(item.pszText);
Memo1->Lines->Add("index: " + IntToStr(index));
Memo1->Lines->Add("X = " + IntToStr(pt.x) + "Y = " + IntToStr(pt.y));
Memo1->Lines->Add("-----------------");
}
}
</font>
Jest to tylko zarys (ten fragment z Memo1 jest tylko do testów).
No i czas na pytanie:
Każda próba wysłania komunikatu via SendMessage do ListView (czyli pulpitu) kończy się wykonaniem nieprawidłowej operacji przez explorer. Jeśli tylko zmienię uchwyt na inny obiekt ListView (np. w drugim programie odpalonym w tle) to wszystko jest w porządku. Czekam na propozycje...
--
"Imagination is more important than knowledge." - A. Einstein