Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
1

Управление другой программой: после открытия программы, в дальнейшем Handle теряется

13.12.2012, 00:54. Показов 2187. Ответов 24
Метки нет (Все метки)

Если прога изначально работает, а потом мы ищем ее с помощью FindWindow, тогда handle есть.
почему же после открытия программы, в дальнейшем он теряется?
C++
1
2
3
4
5
6
7
8
9
10
    HWND Handle;
   if (OpenDialog1->Execute())
   {
 
    ShellExecuteW(Handle, L"open", OpenDialog1->FileName.c_str(), NULL, NULL, SW_SHOWNORMAL);
    Handle = FindWindow(NULL, OpenDialog1->FileName.c_str());
    if (Handle) // почему нет хэндла ? 
        ShowMessage("god");
 
   }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2012, 00:54
Ответы с готовыми решениями:

Управление другой программой.
Вобщем встала передо мной задача создать приложение, которое будет перехватывать управление другой...

управление другой программой
подскажите пожалуйста возможно ли создать программу для управления другой программой допустим(есть...

Управление другой программой
Подскажите инклуды\библиотеки для управления другими програмамми а что хочу делать шас напишу Я...

Управление другой программой
Доброго времени суток! У меня возник вопрос: можно ли средствами c++(или с помощью сторонних...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
24
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
13.12.2012, 02:35 2
А название окна равно пути OpenDialog1->FileName.c_str()?
0
Эксперт С++
8359 / 6097 / 610
Регистрация: 10.12.2010
Сообщений: 28,417
Записей в блоге: 30
13.12.2012, 02:51 3
Цитата Сообщение от stupidstudent Посмотреть сообщение
почему же после открытия программы, в дальнейшем он теряется?
После открытия какой программы ? После чего теряется ?
0
return (true);
1973 / 1108 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
13.12.2012, 07:57 4
Между запуском и поиском окна должно пройти какое-то время, программа же не запускается мгновенно.
Поэтому либо sleep, либо findwindow зациклить, пока не будет найдено окно.
1
4030 / 2320 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
13.12.2012, 10:21 5
Тогда уж просто взять функцию ShellExecuteEx(), она сразу хэндл и отдаст.
Узнать о закрытии внешней программы
1
Эксперт С++
8359 / 6097 / 610
Регистрация: 10.12.2010
Сообщений: 28,417
Записей в блоге: 30
13.12.2012, 11:49 6
Цитата Сообщение от BRcr Посмотреть сообщение
Тогда уж просто взять функцию ShellExecuteEx(), она сразу хэндл и отдаст.
http://msdn.microsoft.com/ru-r... 85%29.aspx
0
BRcr
13.12.2012, 12:06
  #7

Не по теме:

Это мне или ТС?:scratch:

0
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
13.12.2012, 20:44  [ТС] 8
Цитата Сообщение от gumi250 Посмотреть сообщение
А название окна равно пути OpenDialog1->FileName.c_str()?
Да, соответствует

Добавлено через 1 минуту
mimicria,
BRcr, скоро попробую

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
После открытия какой программы ?
Консольной. Обычный hello world для теста.

Цитата Сообщение от Avazart Посмотреть сообщение
После чего теряется ?
после shellexecute

Добавлено через 3 минуты
Не подскажите как сделать ввод строки в уже открытую программу? И как сымитировать перемещение по всем его пунктам(рекурсия? )?
0
Эксперт С++
8359 / 6097 / 610
Регистрация: 10.12.2010
Сообщений: 28,417
Записей в блоге: 30
13.12.2012, 20:46 9
после shellexecute
ShellExecute() замени на WinExec() http://msdn.microsoft.com/ru-r... 85%29.aspx
0
4030 / 2320 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
13.12.2012, 23:24 10
Цитата Сообщение от stupidstudent Посмотреть сообщение
Не подскажите как сделать ввод строки в уже открытую программу? И как сымитировать перемещение по всем его пунктам(рекурсия? )?
Тут у LK есть любимая ссылка на мечты вуайериста... непонятно только, что за пункты такие?
0
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
14.12.2012, 00:53  [ТС] 11
BRcr,
Обычные, к примеру:
1. пункт 1
2. пункт 2
3. пункт 3
и т.д. в каждом пункте, есть подпункты... где вводится информация и выдается результат

Avazart, зачем если microsoft не рекомендует ее использовать?
0
4030 / 2320 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
14.12.2012, 07:00 12
Включаю телепатический приемник... настраиваюсь на волну stupidstudent...
Нужно пройтись в чужой программке по какому-нибудь memo с текстом и пунктами в нем?..
1
Эксперт С++
8359 / 6097 / 610
Регистрация: 10.12.2010
Сообщений: 28,417
Записей в блоге: 30
14.12.2012, 13:03 13
Цитата Сообщение от stupidstudent Посмотреть сообщение
Avazart, зачем если microsoft не рекомендует ее использовать?
Microsoft не рекомендует пользоваться Microsoft, а по сути есть CreateProcess() только задать соответствующие параметры надо
1
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
14.12.2012, 13:54 14
Цитата Сообщение от BRcr Посмотреть сообщение
Включаю телепатический приемник... настраиваюсь на волну stupidstudent...
А я вижу консольное приложение. )
1
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
14.12.2012, 21:00  [ТС] 15
BRcr,
Цитата Сообщение от stupidstudent Посмотреть сообщение
Сообщение от Avazart
После открытия какой программы ?
Консольной. Обычный hello world для теста.
Добавлено через 13 минут
mimicria,
Цитата Сообщение от mimicria Посмотреть сообщение
Поэтому либо sleep, либо findwindow зациклить, пока не будет найдено окно.
не помогло.
0
4030 / 2320 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
14.12.2012, 21:58 16
Фу, блин, это ж консоль... Тут, наверно, надо брать хэндл консоли cmd.exe и ему слать сообщения, чтоб эмулировать нажатия клавиш клавиатуры.
1
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
14.12.2012, 22:43  [ТС] 17
BRcr, я рад что вы поняли )
можно пример из ваших слов?
0
Эксперт С++
8359 / 6097 / 610
Регистрация: 10.12.2010
Сообщений: 28,417
Записей в блоге: 30
14.12.2012, 22:48 18
Может пригодится... Из консоли в Memo
1
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
14.12.2012, 23:56  [ТС] 19
Avazart, жаль не напрямую, но все равно спасибо
0
Эксперт С++
8359 / 6097 / 610
Регистрация: 10.12.2010
Сообщений: 28,417
Записей в блоге: 30
15.12.2012, 00:01 20
Ну так в чем сложность по хендлу сначало вызвать SetForegroundWindow() для передачи фокуса, а затем эмулировать keybd_event() нажатие клавиш ?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2012, 00:01

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

управление другой программой
есть такая проблема: имеем 2 программы,допустим: в 1 программе есть button и edit во 2 программе...

Управление другой программой
Есть сторонняя программа, в окне которой размещены различные элементы, которыми нужно управлять....

Управление другой программой
Возможно ли полностью управлять другой программой? Ну или эмулировать работу с другой программой?...

Управление другой программой.
Подскажите пожалуйста что мне следует прочесть/изучить чтоб уметь с пмощю шарпа управлять другой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.