Форум: "WinAPI";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
ВнизПолучение координат кнопки тулбара Найти похожие ветки
← →
Лёля (2006-12-18 13:09) [0]Доброго времени суток!
Мне необходимо получить координаты кнопки тулбара. Делаю так:
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 существует тоже.
← →
Rouse_ © (2006-12-18 13:11) [1]Тулбар находиться в твоем приложении или в чужом?
← →
Лёля (2006-12-18 13:18) [2]в чужом, конечно...
← →
Rouse_ © (2006-12-18 14:31) [3]А зачем тогда передаешь адрес структуры TRect (в LParam) расположенной в таоем адресном пространстве, а не в чужом?
← →
Лёля (2006-12-18 15:57) [4]а.. спасибо большое, разобралась, мой кусочек кода:
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));
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c