Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: CL | DM;

Вниз

Манипуляция иконками раб. стола   Найти похожие ветки 

 
АлексКриппер ©   (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 вся ветка

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
7-83780
Мыш
2003-03-25 10:43
2003.05.26
ограничение размера десктопа


1-83599
User
2003-05-14 15:07
2003.05.26
Обращение ко всем объектам класса


14-83749
copyr25
2003-04-17 21:34
2003.05.26
---|Ветка была без названия|---


9-83312
GameBoy
2002-12-15 22:09
2003.05.26
Взрывы и дымы


3-83385
bss
2003-04-28 16:22
2003.05.26
Диспетчер связи таблиц MS Access в Delphi