Страница: 1 |
Вопрос: Перечисление ВСЕХ окон | Добавлено: 24.07.07 01:20 |
Автор вопроса: ![]() |
Вкратце задача: есть SAP, надо из него извлекать отчёты. Автоматически. Своего у Сапа вроде ничего нет (если есть - хээээлп). Пробовали AutoIT (эмулятор нажатия клавиш) - нестабильно и ненадёжно.
Начал писать своё (хотел через SetText и SendMessage эмулировать события - чтобы не зависеть от текущего фокуса) - пришла беда откуда не ждал. Не все окна перечисляются. Написал стандартную (в моём понимании) штуку: 1. GetDesktopWindow 2. FuncEnumAllWindow(hwnd){ hwnd=getwindow(hwnd,gw_first); while (hwnd>0){ FuncEnumAllWindow(hwnd); hwnd=getwindow(hwnd,gw_next); } } Остаются неперебранными внутренности саповских окон (текстбоксы и прочее, что находится на самой форме) - проверялся Spy++ - он выдаёт тоже что и моё. Сап - штука явовская. Возможно ли такое, что там объекты рисуются без создания окон? Если да, то что можете посоветовать для моего случая? |
Ответы | Всего ответов: 2 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #1 | Добавлено: 24.07.07 01:36 |
Все можно нарисовать без окон, ИМХО у тебя не тот случай.
1. Найди название класса окна SAP (через SPY++) 2. Через FindWindow получи hWnd этого окна. 3. Перебор дочерних окон либо FindWindowEx либо EnumChildWindows Если использовать GetDesktopWindow & GetWindow, то после нахождения "формы", нужен еще один перебор, но уже с добавлением флага GW_CHILD |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 60 Ответов: 808 |
Профиль | Цитата | #2 | Добавлено: 24.07.07 11:06 |
спай кажись ищет все окна. если не светит он, не поможет никто. можешь попробовать посмотреть через отладчик(OllyDbg) что джавная прога делает |
Страница: 1 |
|