Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/27: Рейтинг темы: голосов - 27, средняя оценка - 4.52
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105

Запуск процесса и последующее управление им

27.06.2008, 15:31. Показов 5312. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Возникла проблема.. реализую лаунчер для онлайн игры.
Задача: надо запустить процесс main.exe и в последующем иметь возможность управлять им (приводить его в полноэкранный режим, оконный, и сворачивание).

Прошу помочь в решении данной задачи.

P.S.: я пробовал два метода - CreateProcess() и WinExec()
В принципе обе они работают, но дело в том, что я не совсем понимаю параметров данных функций (брал все поумолчанию)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2008, 15:31
Ответы с готовыми решениями:

Запуск процесса и управление им через Хендл
Доброго времени суток! Очень нужен полный пример кода на основе блокнота (notepad) следующего типа: Щелчок по кнопке { 1)...

Сохранение и последующее восстановление процесса
Требуется написать программу, которая бдет по расписанию сохранять некоторый процесс, полный дамп. и уметь его восстанавливать из...

Порождение нового процесса и запуск программы в рамках порожденного процесса
Цель работы. Изучение программных средств создания процессов, а также простейших способов обмена данными между процессами. Задание к...

23
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
27.06.2008, 15:44
Добрый день,
Ну для управления уже работающего приложения не этих функций параметры Вам нужны.
Можно использовать сообщения windows. Хотя...пожалуй, удобнее SetWindowLong. Первый параметр - хэндл окна, второй - то, что хотим поменять, третий - на что мы это меняем.
Также смотрите в сторону SetWindowPlacement, SetWindowPos. Все они облегчат Вам жизнь.
0
 Аватар для dioxidin
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
27.06.2008, 17:00
А мне кажется изящнее будет поставить на приложения компоненты DDEClient и DDEServer и слать сообщения от клиентского приложения к серверному (не важно кто из них кто - сообщения отправляются в оба конца). Причем сообщения - не те что в WinAPI сложные, а простой текест, который можно разбирать на составляющие и т.д.
DDE рулит, хоть и старая технология... Устанавливаешь связь между приложениями и шлешь сообщения (передача информации) или макросы (данных не передается; приказ на отработку каких-то действия), а уже твоя игруха пусть на эти сообщения реагирует как хочет. К тому же, когда ты будешь создавать связь, компонент сам игру запустит..
Я тут про DDE где-то писал недавно..
Почитай книгу "Архангельский.. BCB6" Если что - я тебе процитирую койче вкладышем.. Мне кажется - это самое то... Изучать там не много - я сам вчера вечером между-делами почитал.. скоро буду пользовать

Добавлено через 1 минуту
Если, конечно, нет возможности изменить игруху, тогда пользуй виндовые сообщения (WinAPI)
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 04:08  [ТС]
Цитата Сообщение от Vourhey Посмотреть сообщение
Добрый день,
Ну для управления уже работающего приложения не этих функций параметры Вам нужны.
Можно использовать сообщения windows. Хотя...пожалуй, удобнее SetWindowLong. Первый параметр - хэндл окна, второй - то, что хотим поменять, третий - на что мы это меняем.
Также смотрите в сторону SetWindowPlacement, SetWindowPos. Все они облегчат Вам жизнь.
а возможно ли написать пример использования функции SetWindowLong(), а то я нашел синтаксис ее а как использовать не пойму..
...к тому же ее в хелпе то и нету))))

Если что не так, не судите строго.. с winapi я не работал ни разу..

Добавлено через 8 часов 4 минуты
Так, ладно, с горем пополам разобрался со всей этой мутотенью...

остался последний вопрос по данной теме, вот функция SetWindowPlacement();
у нее два параметра :

Code
1
2
3
4
BOOL SetWindowPlacement( 
 HWND hWnd,                 // handle of window 
 CONST WINDOWPLACEMENT *lpwndpl     // address of structure with position data 
);
Первый параметр, все ясно вопросов нету...
вот второй вопрос.. адресс структуры с инфой о позиции окна.. как ее создавать как она должна выглядеть... в общем совсем не понимаю этот параметр..

Кто поможет объяснить мне вот эту штуку))
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2008, 14:40
http://msdn.microsoft.com/en-u... S.85).aspx
Создавать абсолютно также как любую другую стркутуру в языке С++. Способов много
Code
1
2
3
4
5
6
7
WINDOWPLACEMENT w;
w.length = sizeof(WINDOWPLACEMENT);
w.showCmd = SW_SHOWMAXIMIZED;
RECT r;
GetWindowRect(Hnd, &r);
w.rcNormalPosition = r;
SetWindowPlacement(Hnd, &w);
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 16:08  [ТС]
Все вроде бы замечательно, но вот напасть, при попытке откомпилиться выдает следующую ошибку...
Code
1
[Linker Error] Unresolved external '__stdcall SetWindowPlacement(void *, const tagWINDOWPLACEMENT *)' referenced from C:\*****\UNIT1.OBJ
Вот мой код:
Code
1
2
3
4
5
6
7
8
9
HWND hWnd2 = FindWindow(NULL, "test - Блокнот");
 
WINDOWPLACEMENT w;
w.length = sizeof(WINDOWPLACEMENT);
w.showCmd = SW_SHOWMAXIMIZED;
RECT r;
GetWindowRect(hWnd2, &r);
w.rcNormalPosition = r;
SetWindowPlacement(hWnd2, &w);
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2008, 16:19
При попытке компиляции такой ошибки быть не может, так как, это ошибка линкера, а не компилятора.
В принципе, странно, должно нормально все быть. Как с остальными винапи? В опциях директории к lib правильно прописаны?
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 16:31  [ТС]
Да, вроде все правильно прописано...

Ошибка уходит если закоментирую последнюю строку SetWindowPlacement(hWnd2, &w);
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2008, 16:39
Хм...тогда выложите здесь текст Вашего Makefile'а.
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 16:41  [ТС]
Вот прикрепил мак файл..
Вложения
Тип файла: rar Project1.rar (1.8 Кб, 43 просмотров)
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2008, 16:58
Да, вроде, все ок...
не знаю. попробуй среду переустановить. ради эксперимента отбилдить с RTL динамической, и пакетами.

P. S. уже соскучился по gcc
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 17:31  [ТС]
Попробовал эту программу скомпилить на другой машине - тольку ноль.. вот наше в сети вот такое описание данной проблемы...

Вопрос ======================================== =======
16. При компиляции проекта я получаю сообщение линковщика "Unresolved external" с именем функции и указанием модуля. Как решить проблему?
Ответ ======================================== ========
Данная ошибка говорит о том, что линковщик нашел объявление функции и функция используется в программе, но отсутствует модуль в котором эта функция реализована. Что бы устранить ошибку необходимо:
1. Ознакомиться в MSDN(http://msdn.microsoft.com) или в разделе справки билдера Windows SDK (Help\Windows SDK) с описанием функции. В конце описания как правило указывается из какого .lib файла данная функция экспортируется.
2. Зайти в папку $(BCB)\lib\psdk и найти необходимый файл.
3. Если файл найден - через Project\Add to project (или Shift+F11) добавить его в проект. Запустить компиляцию, ошибка исчезнет. Иначе следующий шаг.
4. Найдите .dll с таким же названием в системной папке.
5. Скопируйте в папку проекта.
6. Выполните утилиту $(BCB)\Bin\coff2omf c параметрами командной строки вида coff2omf dllname.dll dllnamebcb.dll
7. С получившимся файлом используйте утилиту $(BCB)\Bin\implib.exe, т.е.
implib dllnamebcb.dll dllnamebcb.lib
8. Полученую библиотеку прилинкуйте к проекту как в шаге третьем.
Кстати, я предпочитаю создавать либы а не использовать борландовские.
Пункты 1,2,3 я уже выполнял еще на стадии разработки.. он всее равно выдает ошибку линкера...

Дальше автор данного решения предлагает выполнить следующие пункты...
но пункты 6 и 7 у меня не получаются, либо я не до конца понимаю чего хочет автор, либо что-то еще..

Проблема остается открытой :huh:

Добавлено через 3 минуты
Вот что мне выдает командная строка:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
 
C:\Program Files>cd\Program files\Borland\CBuilder6\Bin\
 
C:\Program Files\Borland\CBuilder6\Bin>coff2omf user32.dll user32bcb.dll
COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporat
ion
ERROR: Cannot open input file: user32.dll
  (No such file or directory)
 
 
C:\Program Files\Borland\CBuilder6\Bin>coff2omf user32.dll user32bcb.dll
COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporat
ion
ERROR: COFF error: user32.dll
  (coffread.cpp, 1502) : invalid machine type detected
 
 
C:\Program Files\Borland\CBuilder6\Bin>coff2omf user32.dll user32bcb.dll
COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporat
ion
ERROR: COFF error: user32.dll
  (coffread.cpp, 1502) : invalid machine type detected
 
 
C:\Program Files\Borland\CBuilder6\Bin>
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2008, 17:35
Он тебя просит запустить тулзу из папки bin твоего билдера с параметрами. С созданным файлом запустить implib (из того же bin) и линковать.
По поводу ошибки: попробуй прописать полный путь к user32.dll.
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 17:49  [ТС]
попробовал ради эксперимента отбилдить с RTL динамической, и пакетами. - результат тот же самый...

По поводу запуска тулзы с параметрами, он мне выдает ошибку о том что dll моя не правильная или что то вроде того...

Логи cmd я привел выше..

Добавлено через 1 минуту
По поводу первого сообщения dll - я ее потом переместил в bin папку, он ее нашел, тольк сделать ничего не может с ней..

Добавлено через 9 минут
вот я прописал полный путь к библиотеке которая лежит вместе с проектом..
Code
1
2
3
4
5
6
C:\Program Files\Borland\CBuilder6\Bin>coff2omf d://Launcher(cpp)/user32.dll use
r32bcb.dll
COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporat
ion
ERROR: COFF error: d://Launcher(cpp)/user32.dll
  (coffread.cpp, 1502) : invalid machine type detected
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2008, 17:51
Да, у меня аналогично...
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 17:55  [ТС]
У тебя функция SetWindowPlacement(); нормально пашет? без ошибок линкера?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2008, 17:56
У меня все нормально пашет как же я тебе пример-то написал.

Могу предложить быстрый выход: экспортируй функцию ручками из user32.dll.
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 17:57  [ТС]
Ладно, ща тогда переустановлю вилдер... может поможет...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2008, 18:02
А почему он у тебя void * он пишет? Там где должен быть хэндл, почему void*?
[Linker Error] Unresolved external '__stdcall SetWindowPlacement(void *, const tagWINDOWPLACEMENT *)' referenced from C:\*****\UNIT1.OBJ
странно как-то...
0
 Аватар для AsFalt
20 / 19 / 2
Регистрация: 27.06.2008
Сообщений: 105
28.06.2008, 18:05  [ТС]
Я не знаю, вот вся функция которая касается этого обработчика...

Code
1
2
3
4
5
6
7
8
9
HWND hWnd2 = FindWindow(NULL, "test - Блокнот");
 
WINDOWPLACEMENT w;
w.length = sizeof(WINDOWPLACEMENT);
w.showCmd = SW_SHOWMAXIMIZED;
RECT r;
GetWindowRect(hWnd2, &r);
w.rcNormalPosition = r;
SetWindowPlacement(hWnd2, &w);
как видно hWnd2 - имеет тип HWND
и почему он в обработчике пишет void я не знаю...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2008, 18:05
Помогаю со студенческими работами здесь

Запуск и последующее удаление всех исполняемых файлов из каталога
Здравствуйте. Прошу помочь написать программу, которая бы запускала все исполняемые файлы (.exe, .bat, .cmd) из заданного каталога, а потом...

Запуск нового процесса в контейнере существующего процесса
Здравствуйте. Недавно задался целью запустить игру(minecraft), которая уже имеется на компьютере, с помощью кода на C#. Реализовал это с...

Запуск процесса процесса, приложения на стороне клиента
Доброго времени суток господа программисты, помогите новичку решить вопрос, Есть Web приложение связанное с базой SQL, в базе имеются...

Управление памятью процесса
Значения параметров состояния памяти представляют собой константы. Измените код, так чтобы на экран выводились их имена, а не...

Управление видимостью дочернего процесса
Здравствуйте. Консольное приложение можно сделать скрытым или видимым, например, так: #include <WS2tcpip.h> int main() { ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru