Форум: "WinAPI";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
ВнизМанипуляция иконками раб. стола Найти похожие ветки
← →
АлексКриппер (2003-03-31 14:18) [0]Здравствуйте, мастера. Почему при попытке определить координаты объекта на рабочем столе Винда выводит мессагу, что Explorer вызвала ошибку в comctl32.dll? И потом обычно вылазит, как в безопасном режиме - страница со ссылкой "Восстановтить рабочий стол Active Desktop"?
Часть кода:
uses commctrl;
function GetDesktopListViewHandle: THandle; // дескриптор
//рабочего стола для манипуляций
// c иконками
var s: string;
begin
Result := FindWindow("ProgMan", nil);
Result := GetWindow(Result, GW_CHILD);
Result := GetWindow(Result, GW_CHILD);
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
if PChar(S) <> "SysListView32" then Result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i, g: integer; p: TPoint;
begin
g:= ListView_GetItemCount(GetDesktopListViewHandle); // идёт нормально
ListView_GetItemPosition(GetDesktopListViewHandle,
i, p); // а здесь выводит ошибку, ф. возвращает False
end;
и ещё в некоторых функциях начинающихся с ListView_ выводит ошибку. Я пытался просто послать сообщение LVM_GETITEMPOSITION на этот дескриптор, через SendMessage, результат тот же. В чём дело? Или у меня Винда (МЕ) глючит? На диске бад блок?
с уважением Александр.
← →
MBo (2003-03-31 14:35) [1]Нужно внедряться в чужое адресное пространство.
Описание есть в Рихтере.
Пример Almaz в кладовке.
← →
Morfein (2003-03-31 20:59) [2]никуда не надо внедряться... нужно память под переменные правильно выделять!
function GetItemPosition(Handle: hWnd; Index: Integer; var ppt: TPoint): boolean;
var
PointBuf : ^TPoint;
begin
PointBuf:=VirtualAlloc(nil, Sizeof(TPoint), $8000000 or MEM_COMMIT, PAGE_READWRITE);
Result:=Boolean(SendMessage(Handle, LVM_GETITEMPOSITION, Index, dword(PointBuf)));
if Result then
begin
ppt.x:=PointBuf^.x;
ppt.y:=PointBuf^.y;
end;
VirtualFree(PointBuf, 0, MEM_RELEASE);
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c