Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 и 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
2-1235201278
Andrey K
2009-02-21 10:27
2009.04.12
Присвоить значение


2-1235320820
KillaTank
2009-02-22 19:40
2009.04.12
Модальное окно в ДБ


2-1234471401
KillaTank
2009-02-12 23:43
2009.04.12
Создание DBF файла во время работы приложения


15-1234363562
Просто_ прохожий
2009-02-11 17:46
2009.04.12
Прерывается доступ в Internet


2-1234868786
b@v
2009-02-17 14:06
2009.04.12
Вывод изображения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский