Цитата(Гость_Владимир @ 13.1.2006, 14:34 ) | Передаю хэндл и локальные координаты. Возможно ошибка в параметрах SendMessage.
| Дело в том, что структура TPoint должна была в адресном пространстве чужого процесса...
| Код | var hToolbar : HWND; ProcessID : DWORD; MousePos : TPoint; rcToolbar : TRect; hProcess : THandle; Buffer : pointer; tmp : DWORD; Button : integer;
begin // в hToolbar должен быть хэндл окна тулбара
MousePos := Mouse.CursorPos; GetWindowRect(hToolbar, rcToolbar); MousePos.X := MousePos.X - rcToolbar.Left; MousePos.Y := MousePos.Y - rcToolbar.Top;
GetWindowThreadProcessId(hToolbar, ProcessID); hProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_WRITE, False, ProcessID); Buffer := VirtualAllocEx(hProcess, nil, SizeOf(MousePos), MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProcess, Buffer, @MousePos, SizeOf(MousePos), tmp); Button := SendMessage (hToolbar, TB_HITTEST, 0, LPARAM(Buffer)); VirtualFreeEx(hProcess, Buffer, 0, MEM_RELEASE); CloseHandle (hProcess);
// в Button находится № кнопки end; | |