Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для deff78
11 / 11 / 2
Регистрация: 09.12.2009
Сообщений: 56

Как посылать программам параметры выполнения?

01.06.2010, 01:44. Показов 1669. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дорогие форумчане!

Передо мной стоит задача написать комплекс из двух программ.

Программа А представляет собой окно с вращающейся фигурой (у меня будет бегающий человечек). Программа В управляет работой всех запущенных экземпляров программы А.
На форме В должны быть следующие элементы управления:
•«Запустить программу А» - запустить новый экземпляр А;
•«Пауза» программы А останавливаются;
•регулятор скорости вращения фигур. Все фигуры дочерних процессов А вращаются с одной скоростью, изменение регулятора влияет на скорость вращения этих фигур.


Насколько я понял, программа В должна посылать сообщения с опр. параметрами всем А.

Не совсем ясно мне пока следующее:
как сохранять управление над неограниченным количеством дочерних процессов;
как посылать программам А параметры (скорость вращения фигуры, например).


Буду благодарен, если что-нибудь подскажите или выложите иллюстрирующие примеры.. Или, может, кто-нибудь похожее что-нибудь делал...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2010, 01:44
Ответы с готовыми решениями:

Как после выполнения asp ничего не посылать браузеру?
Проблема в следующем: с основной страницы вызывается по ссылке другая asp-страница, которая ничего не показывает, а просто удаляет что-то...

Как разобрать в CMD переданные параметры аналогично программам?
Здравствуйте! Известно, что CMD разбирает параметры командной строки (%1, %2, %3...) совсем не так, как они разбираются при вызове других...

Как посылать письма из Явы?
Надо мне написать прогу на Яве, запускаемую на почтовом сервере, которая бы при некоторых условиях посылала бы письма админу. Какая часть...

12
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
01.06.2010, 07:05
https://www.cyberforum.ru/atta... 1270402552
скачать. типа spy++.
и потом поизучать winapi. SendMessage()- вот и все, что нужно. главное параметры. WM_COMMAND- это любой элемент управления(кнопочки понажимать, менюшки). параметры Voyeur'ом узнать.
если обе программы пишутся одним человеком, то написать обработчики своих сообщений WM_USER+1 +2 и сколько надо- и слать их.
1
 Аватар для deff78
11 / 11 / 2
Регистрация: 09.12.2009
Сообщений: 56
01.06.2010, 19:46  [ТС]
Большое спасибо, буду изучать.

Добавлено через 4 часа 7 минут
Ничего там не понял, даже не разобрался, что где смотреть, и где там может быть отправка сообщений. Мне нужен какой-нибудь ооооочень простой примерчик того, как из окошка одной программы можно управлять действиями другой, менять её параметры.... Неужели ни у кого нет ничего похожего??
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
01.06.2010, 20:16
Вот вам "ну оооочень простой пример":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//--------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 HANDLE h;
String s="Test";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 h=WindowFromPoint(Mouse->CursorPos); //Получаем хэнд окна из позиции курсора
  SetWindowText(h,s.c_str());  //Теперь заголовок окна буде "Test"
}
//---------------------------------------------------------------------------
На форме Timer1, от его интервала зависит рвение вашей программы гадить окнам.

Добавлено через 3 минуты
Да, кстати, изменение возврату не подлежат. Спасет только перезапуск программы! Можно даже у проводника заголовок изменить.
1
 Аватар для deff78
11 / 11 / 2
Регистрация: 09.12.2009
Сообщений: 56
01.06.2010, 20:39  [ТС]
Благодарю, Ni'Tan!
Я, кстати, нашёл нечто более подходящее к специфике моих задач, обучающий пример Архангельского. Глава 7, раздел 4.1.
Если кому-нибудь пригодится - буду только рад.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
01.06.2010, 21:59
deff78, и что вы там нашли?
0
 Аватар для deff78
11 / 11 / 2
Регистрация: 09.12.2009
Сообщений: 56
01.06.2010, 23:51  [ТС]
Прошу извинить, хотел прикрепить предоставленный автором книги проект, но увы, мой инет упорно отказывается нести бремя относительно тяжёлого исходящего трафика. Когда эти проблемы пропадут - непременно прикреплю весь проект. А так суть тоже в использовании SendMessage.
Для меня полезным оказалось наличие в проекте определения собственных сообщений WM_MyMess1.

Но возникла другая проблема.
Моя главная программа командой
C++
1
 WinExec("Pmess2.exe",SW_RESTORE);
создаёт столько процессов программы Pmess2, сколько раз пользователь нажимает на кнопку запуска этого процесса. Но когда n процессов уже запущено, у меня появляется необходимость изменять скорость вращения фигуры во всех запущенных копиях процесса Pmess2.exe.
Я пробовал использовать
C++
1
SendMessage(FindWindow("TForm1","Приложение Pmess2"),WM_Pause,0,0);// где WM_PAUSE - это определённое мной сообщение.
, чтобы получить доступ к одноимённым процессам, но получал лишь к последнему запущенному.

Есть ли какие-нибудь действующие способы отправить сообщения всем запущенным копиям программы? И главное.. - как?
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
02.06.2010, 00:11
Он там нашёл API Windows сообщения. Посылка и обработка сообщений.

Добавлено через 8 минут
Есть ли какие-нибудь действующие способы отправить сообщения всем запущенным копиям программы? И главное.. - как?
deff78, а ты до главы 7.4.4 дошёл? Правда там для одного окна.
0
 Аватар для deff78
11 / 11 / 2
Регистрация: 09.12.2009
Сообщений: 56
02.06.2010, 00:48  [ТС]
Grey, в том и интерес, что нужно для нескольких..
0
17 / 16 / 1
Регистрация: 03.11.2009
Сообщений: 36
02.06.2010, 10:02
Лучший ответ Сообщение было отмечено как решение

Решение

Меня заинтересовал твой вапросик и решил попробавать как это реализовать решил применить так называемые Section или попросту говоря "проекция файла" (Что это такое это в Google || Джеффри РИХТЕР "Windows Для профессионалов")
Теперь кода писал на каленки так что могут быть недочоты но вроде без ошибок
Итак пишим клиента который будет передовать данные в другое приложение через Edit
C
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <vcl.h>
#pragma hdrstop
 
#include "serv.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hMapping;
char* lpData;
char* lpBuffer;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Тут в принципе и идет передача данный к серверу очень грубо говоря
memcpy ( lpData , Edit1->Text.c_str(),Edit1->Text.Length());
/*Здесь как бы нужна проверка на то что содержит ли Edit только цифры 
но при проецирование файловых данных прототип функции PVOID MapViewOfFile поэтому тут можно хоть структуру передать все зависит от фантазии*/
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnmapViewOfFile(lpData); //Тут отключение файла данных от адресного пространства
CloseHandle(hMapping); // Тут закрытие объекта "проекция файла"
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
hMapping = CreateFileMapping( (HANDLE)(-1), // Создаем "проекцию файла" в page file с именем "MyShare" может быть любое
NULL, PAGE_READWRITE, 0, 0x0100, "MyShare");
if (hMapping == NULL){
   Memo1->Lines->Add("NULL");
   }
lpData = (char*) MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS,0,0,0); //проецирование файловых данных на адресное пространство 
if (lpData == NULL) exit(0);
}
//---------------------------------------------------------------------------
Теперь пишем серверное приложение каторое будет получать данные от клиента и в зависимости от полученных данных увеличиваем полуось элипса по которой движется круг
C
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <math.h>
 
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int r=20;
int angle= 0;
int dangle = 5;
int rCircle2=100;
int x,y;
int a1, a2;
HANDLE hMapFile;
char* pBuf=NULL;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Timer1->Enabled=true;
Timer1->Interval=100;
Shape1->Shape=stCircle;
Shape1->Width=2*20;
Shape1->Height=2*20;
hMapFile = OpenFileMapping(  // Открываем Section по имени
                   FILE_MAP_ALL_ACCESS,   // read/write access
                   FALSE,                 // do not inherit the name
                   "MyShare");               // name of mapping object
 
   if (hMapFile == NULL)
   {
      ShowMessage(GetLastError());
   }
 
   pBuf = (char*) MapViewOfFile(hMapFile, //  Проецируем данный на адресное пространство процесса
               FILE_MAP_ALL_ACCESS,  // read/write permission
               0,
               0,
               0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Shape1->Visible=false;
int rCircle=100;
if(pBuf!=NULL){
   rCircle2=atoi(pBuf); //Переобразием (char*) к int
   }
angle=angle+dangle;
x=(Form1->ClientWidth / 2)+ceil(rCircle2*cos(angle*M_PI/180));
y=(Form1->ClientHeight  / 2)-ceil(rCircle*sin(angle*M_PI/180));
Shape1->Left= x - r;
Shape1->Top= y - r;
Shape1->Visible=true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
}
//---------------------------------------------------------------------------
Запускай хоть 10 серверное приложение они будут считывать данный с Section и менять значение пополуось если на клиента кликнуть Button1Click;
3
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
02.06.2010, 19:56
FindWindowEx()- ищет дочерние окна. первый парамет NULL- дочерние окна рабочего стола. второй параметр- дочернее окно, с которого надо искать. ищутся в порядке Z-order(чтот на слух не перевожу). итого:
ищем окно номер один.( второй параметр NULL)
ищем окно номер два( второй параметр- хэндл первого найденного окна)
и так далее, пока не найдем ничего=)
1
 Аватар для deff78
11 / 11 / 2
Регистрация: 09.12.2009
Сообщений: 56
03.06.2010, 00:07  [ТС]
radiohobbyt, огромное спасибо, реализовал так:

C++
1
2
3
4
5
6
7
8
HWND aa = FindWindow("TForm1","Приложение Pmess2");
//SendMessage(aa,WM_Pause,0,0);
//if (GetWindow(aa,GW_HWNDNEXT)) ShowMessage ("åñòü ñûíû");
while (aa)
{
SendMessage(aa,WM_Pause,0,0);
aa = GetNextWindow(aa,GW_HWNDNEXT);
}
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
25.03.2012, 17:42
В одной папке с ОСНОВНЫМ EXE есть папка "Help" в которой вторая программа HELP.EXE, посоветуйте как из ОСНОВНОЙ программы запускать и завершать HELP.EXE а также управлять свойствами таймера (Timer1->Enabled=true) который расположен в программе HELP.EXE ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.03.2012, 17:42
Помогаю со студенческими работами здесь

Как посылать команды в браузер?
Привет подскажите как можно такое реализовать, Иметься роутер TP-Link, и надо сделать программу которая его перегружает, такая функция...

Как посылать GET запросы по https?
как посылать GET запросы по https ?

Как посылать сообщения от машины к машине?
Мне необходимо посылать сообщения от компьютера к компьютеру, а я не знаю, как лучше это сделать и с помощью каких средств. Не подскажете?...

Как посылать команды в свёрнутую программу?
Доброго времени суток! В C++ я очень слаб! Кто за старшего, помогите пожалуйста. Windows7 g++ текстовый редактор ...

Как посылать окну нажатия клавиш?
Подскажите, как послать окну нажатия клавиш, чтобы при этом фокус был необязательно на этом окне. Пробовал SendMessage(hwnd, WM_KEYDOWN,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
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. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru