![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение координат кнопки тулбара [D6, WinXP]
Лёля © (2006-12-18 13:09:00)Доброго времени суток!
Мне необходимо получить координаты кнопки тулбара. Делаю так:
var
hToolBar: HWND;
r: trect;
...
hToolBar := FindWindowEx(hWindow, 0, 'TToolBar', nil);
if SendMessage(hToolBar, TB_GETITEMRECT, 3, lParam(@r)) <> 0 then
ShowMessage(Format('%d %d', [r.Left, r.Top]));
По идее, в случае успеха SendMessage возвращает ненулевой результат (и, насколько я понимаю, заполненную структуру TRect). Она его и возвращает. Вот только значения TRect не изменились. Что же делать? Дескриптор окна тулбара найден правильно и кнопка с индексом 3 существует тоже.
Лёля (2006-12-18 15:57:00) [1]а.. спасибо большое, разобралась, мой кусочек кода:
var
r: TRect;
dwQRDpid: DWORD;
hProcess: THandle;
addr: pointer;
count: cardinal;
xPosTB, yPosTB: Integer;
...
hWindow := FindFirstQrdViewer;
hToolBar := FindWindowEx(hWindow, 0, 'TToolBar', nil);
GetWindowThreadProcessId(hWindow, dwQRDpid);
hProcess := OpenProcess(PROCESS_VM_READ or PROCESS_VM_OPERATION, false, dwQRDpid);
addr := VirtualAllocEx(hProcess, @r, SizeOf(r), MEM_COMMIT, PAGE_READWRITE);
SendMessage(hToolBar, TB_GETITEMRECT, 3, lParam(addr));
ReadProcessMemory(hProcess, addr, @r, SizeOf(r), count);
VirtualFreeEx(hProcess, addr, SizeOf(r), MEM_RELEASE);
xPosTB := r.Left + 1;
yPosTB := r.Top + 1;
CloseHandle(hProcess);
SendMessage(hToolBar, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(xPosTB, yPosTB));
SendMessage(hToolBar, WM_LBUTTONUP, 0, MakeLParam(xPosTB, yPosTB));
Rouse_ (2006-12-18 14:31:00) [2]А зачем тогда передаешь адрес структуры TRect (в LParam) расположенной в таоем адресном пространстве, а не в чужом?
Лёля (2006-12-18 13:18:00) [3]в чужом, конечно...
Rouse_ (2006-12-18 13:11:00) [4]Тулбар находиться в твоем приложении или в чужом?