Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
ВнизМанипуляция в чужом приложении. Найти похожие ветки
← →
cosinus (2009-02-25 10:31) [0]Есть некое чужое приложение, которое я стартую из своей программы. После ввода логина и пароля (тоже програмно), стартует его главное окно, в котором есть т.н. "основное меню", т.е. "Файл", "Правка" (для примера по аналогии с IE) и т.д...
Задача
Мне необходимо открыть определенный пункт в этом меню.
Что делал.
1) Пытался "втупую" послать главной формеVK_F10
и дальше пошлепали по менюVK_RIGHT,VK_RIGHT, VK_RIGHT, VK_DOWN
и т.д.
пример:sendmessage(MainHND, WM_KEYDOWN, VK_RIGHT, 0);
sendmessage(MainHND, WM_KEYUP, VK_RIGHT, 0);
Результат: F10 шлется, то есть я вижу, как "утапливается" первый пункт меню, и все, на стрелки не реагирует, хотя нажимая ручками в этот момент стрелки(после програмного F10), все работает.
2) Подумал слать не главной форме стрелки, а этому меню. После F10 делаю GetFocus, получаю нужный handle и шлю уже ему. Результат аналогичный.
3) Решил поступить еще более тупее )))GetRect
главного окна, далееSetCursorPos
с нужным смещением по X и Y иsendmessage(MenuHND, WM_LBUTTONDOWN, MK_LBUTTON, 0);
sendmessage(MenuHND, WM_LBUTTONUP, MK_LBUTTON, 0);
Тут правда наверно накосячил, неправильно это... Ну в общем тоже не работат. Курсор как будто никуда не перемещается, я могу им елозить по экрану, сколько душе вздумается, но в момент клика в любом месте, он как раз и перемещается, куда ему надо.
Чувствую, что много ошибок и все делаю не так, поэтому и спрашиваю здесь. Подскажите, как мне реализовать мою задачу.
← →
clickmaker © (2009-02-25 10:37) [1]можно вычислить (через spy++ или winsight), какие ID у пунктов меню и слать уже WM_COMMAND
← →
cosinus (2009-02-25 10:48) [2]Пробовал через Winspector, но он показывал только 2 компонента формы, а именно саму форму
TMainForm
и MDIMDIClient
. Сейчас проверил - spy++ показывает тоже самое.
← →
cosinus (2009-02-25 10:59) [3]О, еще ловил сообщения, как раз думал отловить ID-шники...
Поймал только вот эти...WM_ENTERMENULOOP
WM_INITMENU
WM_MENUSELECT
Записал параметры, а после перезапуска все данные изменились (((
Оно похоже динамически создается.
Вот собственно в связи с этим, если вы не против, еще 2 вопроса вдогонку...
1) Можно ли как то отловить (не ставя хуки) динамически создаваемое меню?
2) Почему ни одна из программ а-ля Spy++ "не видит" его?
← →
cosinus (2009-02-25 16:41) [4]Проблемма так и не решилась (((
Может хоть что-нибудь подскажите, в какую сторону копать?
← →
Leonid Troyanovsky © (2009-02-25 18:47) [5]
> cosinus (25.02.09 10:59) [3]
> Записал параметры, а после перезапуска все данные изменились
> (((
Сомневаюсь, что парметры, скажем, WM_COMMAND меняются от
запуска к запуску, обычно они зашиты, хотя бы, в ресурс.
Посмотри, например
http://groups.google.com/group/fido7.ru.delphi/msg/925bebee0309bec9
--
Regards, LVT.
← →
cosinus (2009-02-26 12:30) [6]
> Leonid Troyanovsky © (25.02.09 18:47) [5]
Спасибо, действительно помогло.
Но по ходу родился еще вопрос.
Когда я выбираю нужный мне пункт меню (програмно или нет, это не критично), идет проверка лицензионности программы. Вибираю пока так...SendMessage(i,WM_COMMAND,MakeWParam(WParam(ListBox1.Items.Objects[18]), 0),0);
Так вот, проверка идет около 1 секунды, а потом появляется окошко с кнопочкой "ОК", означающее, что все нормально, поверку все прошло. Пока я не нажму руками на ОК, моя программа (sender) висит. Такое ощущение, что ответ на WM_COMMAND от программы-ресивера приходит только после нажатия на эту кнопку. Вопрос. Как мне програмно нажать на кнопку Ок, если я не могу сдвинуться в программе с места появления этой кнопки, пока ручками не нажму ОК? В общем замкнутый круг.
Потоки не спасут отца русской демократии?
← →
Юрий Зотов © (2009-02-26 12:40) [7]1. PostMessage вместо SendMessage.
2. Цикл, ожидающий появления диалога.
3. Программное нажатие ОК.
← →
cosinus (2009-02-26 15:01) [8]
> Юрий Зотов © (26.02.09 12:40) [7]
Спасибо, PostMessage помогло.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c