Главная страница
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.016 c
7-83771
Stdnet
2003-03-29 18:25
2003.05.26
Date TimePicker


1-83521
$HiC0
2003-05-13 11:22
2003.05.26
2-х цветное изображение... получение, обработка


1-83467
Добрый Ээх
2003-05-14 23:54
2003.05.26
Скролинг и StringGrid


4-83805
mikeevteev
2003-02-17 21:07
2003.05.26
Как создать большой хинт для tray icon?


14-83753
Бобик
2003-05-05 21:07
2003.05.26
Полный путь и имя файла из TOpenDialog в переменную типа стринг?