Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2014, 02:35   #1
Girei
Пользователь
 
Аватар для Girei
 
Регистрация: 22.10.2013
Сообщений: 72
Сообщение Работа с другими программами

Доброго времени суток. Давно помышлял о написании одного приложения, но средства, которые надо использовать, да и механику представляю слабо.
Суть:
Программа запускает другую (строго .ехе), назовем её GM. После запуска появляется экран загрузки GM. После того, как подгрузит, выплывает окно с кнопкой "Запустить GM". Хочется автоматизировать этот процесс. Т.е., чтобы программа запускалась самостоятельно после загрузки. На все вопросы отвечу, что таких программ всего 2 и только у GM есть загрузочный экран.
Какими средствами это можно сделать? Спасибо.
Girei вне форума Ответить с цитированием
Старый 20.05.2014, 08:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Т.е. ты хочешь отследить некое событие в сторонней программе, и отреагировать на него программно из своей?
Ну тебе нужно искать особенности типа
Цитата:
выплывает окно с кнопкой
Вот пробей ее класс и вложенность и мониторь в таймере когда такая кнопка появится. Помогут в этом FindWindow() и FindWindowEx().
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2014, 20:57   #3
Girei
Пользователь
 
Аватар для Girei
 
Регистрация: 22.10.2013
Сообщений: 72
Смех

Цитата:
Сообщение от Stilet Посмотреть сообщение
Т.е. ты хочешь отследить некое событие в сторонней программе, и отреагировать на него программно из своей?
Ну тебе нужно искать особенности типа
Вот пробей ее класс и вложенность и мониторь в таймере когда такая кнопка появится. Помогут в этом FindWindow() и FindWindowEx().
Можно подробнее?) я довольно смутно понял)
Girei вне форума Ответить с цитированием
Старый 20.05.2014, 21:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Так ведь и я смутно понял что ты хочешь сделать.
Ты хочешь управлять другой программой, но не знаешь в какой момент времени передавать ей команды - так?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2014, 21:38   #5
Girei
Пользователь
 
Аватар для Girei
 
Регистрация: 22.10.2013
Сообщений: 72
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так ведь и я смутно понял что ты хочешь сделать.
Ты хочешь управлять другой программой, но не знаешь в какой момент времени передавать ей команды - так?
Да, ты понял все предельно правильно. Мало того, что не знаю, так ещё и примерно не представляю как. Не понимаю самой механики действий: как происходит обращение. Такие задачи - совсем новые для меня, поэтому, хочется подробнее узнать
Girei вне форума Ответить с цитированием
Старый 20.05.2014, 22:27   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
как происходит обращение.
Никак если одна из программ не предусматривает это.
Ты говоришь что жертва являет миру кнопку, на которую требуется сразу же автоматом нажать - верно?
Вот я и говорю - поставить таймер. В нем функции нахождения кнопки и вызов ее клика.

Ладно, давай так. Сначала ознакомишься с этими темами:
http://www.programmersforum.ru/showthread.php?t=66098
http://www.programmersforum.ru/showthread.php?t=5139
А дальше уже видно будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2014, 23:33   #7
Girei
Пользователь
 
Аватар для Girei
 
Регистрация: 22.10.2013
Сообщений: 72
Радость

Цитата:
Сообщение от Stilet Посмотреть сообщение
Никак если одна из программ не предусматривает это.
Ты говоришь что жертва являет миру кнопку, на которую требуется сразу же автоматом нажать - верно?
Вот я и говорю - поставить таймер. В нем функции нахождения кнопки и вызов ее клика.

Ладно, давай так. Сначала ознакомишься с этими темами:
http://www.programmersforum.ru/showthread.php?t=66098
http://www.programmersforum.ru/showthread.php?t=5139
А дальше уже видно будет.
Сел читать, спасибо за советы)
Girei вне форума Ответить с цитированием
Старый 08.06.2014, 11:55   #8
Girei
Пользователь
 
Аватар для Girei
 
Регистрация: 22.10.2013
Сообщений: 72
По умолчанию

Ещё раз спасибо за уделенное время. Одну из двух программ открываю без проблем. Со второй - серьезные проблемы. При запуске появляется загрузочный экран и окно. (пикчу прикладываю)
2014-06-08_11-44-41.jpg
Хэндл окна VС отказывается находить принципиально. Поиск проводил следующим образом:
Через spy++ получил класс и

Код:

HWND C,P;
		
	C = FindWindow(L"DirectUIHWND", NULL);
	P = FindWindowEx(C, 0, L"Button", L"&No");
	SendMessage(P,BM_CLICK, 0, 0);
С другим окном работает, этот диалог мне не закрыть никак. Попробовал API шпион, чтобы вообще от него избавиться, ибо действует на нервы давно. С логом толком разобраться не смог, ибо функций WinApi почти не знаю. Лог прикладываю. Как справиться с бедой?
GM.exe.apilog.txt
P.S Так и не понял принципиальной разницы между дескриптором и хендлом.

Так, кажется, разобрался. Искал не окно, а его часть. Поэтому и получал ерунду.

P.P.S Не запускаются программы. Компилятор просто игнорирует ShellExecute с верными параметрами. Пришлось батник писать. Я читал, что на выходе у это функции есть код ошибки, но как получить его, толком не понял.

Последний раз редактировалось Girei; 08.06.2014 в 13:15.
Girei вне форума Ответить с цитированием
Старый 08.06.2014, 14:20   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

хэндл - это дескриптор на английском.
Надо в найденное окно С слать WM_COMMAND с нужными параметрами - иденфикатором кнопки No.
ПОсле ShellExecute() можете воспользоваться GetLastError() на предмет кода ошибки.
waleri вне форума Ответить с цитированием
Старый 08.06.2014, 14:30   #10
Girei
Пользователь
 
Аватар для Girei
 
Регистрация: 22.10.2013
Сообщений: 72
По умолчанию

Как получить ID кнопки? Думается мне, что это все-таки - не один термин.
Spy++ выдает дескриптор XXXXXXXXh, а VC орет на то, что ему нужно восьмеричное число. Думаете, если перевести, то сработает?
Girei вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
spy++ управлять другими программами? neks Фриланс 3 25.03.2014 04:08
Работа с другими программами через С++ xitrec1zaraza Общие вопросы C/C++ 4 12.02.2011 16:34
Работа с другими программами через Delphi slon Общие вопросы Delphi 8 10.10.2008 11:58
Управление другими программами L_M Общие вопросы Delphi 4 04.05.2008 02:53
Работа с другими программами kurazh77 Общие вопросы Delphi 6 09.10.2007 22:07