Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.12;
Скачать: CL | DM;

Вниз

Манипуляция в чужом приложении.   Найти похожие ветки 

 
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 и MDI MDIClient. Сейчас проверил - 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1235503620
dmitry_12_08_73
2009-02-24 22:27
2009.04.12
Проверка на открытое окно в приложении


2-1235559158
Footballer
2009-02-25 13:52
2009.04.12
Отправка e-mail


15-1234245698
zdm
2009-02-10 09:01
2009.04.12
перекодировка DOS Delphi 2009


2-1235371106
Ryden
2009-02-23 09:38
2009.04.12
Как повернуть компанент TDBGrid


2-1235452145
vegarulez
2009-02-24 08:09
2009.04.12
вопрос связи поток и DataModule