реклама на сайте
подробности

 
 
> Передача данных из одной программы в другую, Программирование в Borland Bilder6
kolisnichenko_r
сообщение Nov 6 2008, 12:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Здравствуйте!
Как можно передать данные из одной программы в другую?
Есть одна программа, на ней поле EDIT, вводим данные. Есть другая программа, тоже поле EDIT, выводит данные, которые были введены в поле EDIT первой программы. одскажите с чего начать? Может есть где пример?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Demeny
сообщение Nov 7 2008, 07:29
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(kolisnichenko_r @ Nov 6 2008, 15:02) *
Здравствуйте!
Как можно передать данные из одной программы в другую?
Есть одна программа, на ней поле EDIT, вводим данные. Есть другая программа, тоже поле EDIT, выводит данные, которые были введены в поле EDIT первой программы. одскажите с чего начать? Может есть где пример?

Если данных немного (до 64 Кбайт), проще всего организовать обмен данными между процессами с помощью сообщений (SendMessage, PostMessage и т. п.), и в теле сообщения передавать сами данные, а в цикле обработки сообщений (DispatchMessage) извлекать их и делать, что необходимо - например, выводить в окно.
В вашем случае, если нужно просто вывести строку в окно другого процесса, можно предложить ещё более простой путь.
1) Сначала в первой программе Вам нужно разыскать нужное окно EDIT из второй программы в иерархии всех окон системы, по какому-либо признаку, например, по заголовку окна (см. функцию FindWindow), таким образом, будет получен хэндл нужного окна вывода второй программы. Пусть Вас не смущает, что это окно принадлежит другой программе - хэндл окна является уникальным идентификатором окна в рамках системы.
2) Получив хэндл, можете делать с этим окном всё, что угодно - выводить в него текст (SetWindowText), перемещать его (MoveWindow) и т. п.
Только обратите внимание на следующий момент - искать нужно не основное окно второго приложения, а непосредственно поле EDIT (которое тоже является окном) - все элементы графического интерфейса являются дочерними окнами относительно главного окна приложения.


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Nov 7 2008, 10:56
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



А FindWindow находит pодительское окно веpхнего уpовня, не осуществляет поиск дочеpних окон. Как можно найти поле EDIT?
Может есть пример?
Go to the top of the page
 
+Quote Post
Voice2001
сообщение Nov 7 2008, 11:05
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 29-01-08
Из: эМ-ск
Пользователь №: 34 553



для поиска дочерних окон нужно использовать FindWindowEx
Код
HWND FindWindowEx(
    HWND hwndParent,    // handle to parent window
    HWND hwndChildAfter,    // handle to a child window
    LPCTSTR lpszClass,    // pointer to class name
    LPCTSTR lpszWindow    // pointer to window name
   );

но такой подход не совсем правильный для передачи данных из программы в программу
раньше для этого использовали DDE, но сейчас этот подход устарел
поэтому либо как описано выше, либо через бефур обмена. Вроде есть еще другие способы, но я давно не программил, на вскидку сказать не могу


--------------------
Продаю котят. Недорого. 50р ведро.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 7 2008, 11:28
Сообщение #5


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Задача-то какая? Написать _две_ программы? Или одну, ту что будет управлять любой уже имеющейся?

В первом случае надо организовать обмен WM_* сообщениями, а во втором только через окна.

CODE
HWND hWnd = FindWindow("#32770", "Advanced Status"); // Ищем главное окно
if(hWnd != NULL)
{
HWND hChild = GetWindow(hWnd, GW_CHILD); // Компонент
if(hChild)
{
hChild = GetWindow(hChild, GW_HWNDNEXT); // Еще..
if(hChild)
{
hChild = GetWindow(hChild, GW_HWNDNEXT); // И еще...
if(hChild)
{
char str[255];
GetWindowText(hChild, str, 255); // Считали из него текст (уровень сигнала WiFi)
//...
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Nov 7 2008, 12:56
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(SysRq @ Nov 7 2008, 15:28) *
Задача-то какая? Написать _две_ программы? Или одну, ту что будет управлять любой уже имеющейся?

Нужно писать две программы. Делаю так:
Код
  char buff[100];
  HWND hWnd=FindWindow(NULL,"Для чтения");//
if (hWnd)
{GetClassName(hWnd,buff,100);
  ShowMessage(buff);
}
  else{;}
if(HWND hWnd_edit=FindWindowEx(hWnd,NULL,"TEdit",NULL))
{ShowMessage("All OK");//
  GetClassName(hWnd_edit,buff,100);
  ShowMessage(buff);
// SetWindowText(hWnd,"ONO");// Работает
   char str[255];
   GetWindowText(hWnd_edit, str, 255);
    ShowMessage(str);
    Edit1->Text = str;
}
   else
    {ShowMessage("Error !");//
    }

Получается все работает за исключением двух строчек:
Код
ShowMessage(str);
    Edit1->Text = str;

Тоесть, извещение приходит но пустое и в Edit1 того текста который написан в другой программе тоже нету.
Go to the top of the page
 
+Quote Post
OlegH
сообщение Nov 12 2008, 18:51
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 186
Регистрация: 14-01-06
Из: Украина, г.Харьков
Пользователь №: 13 168



Если обе программы - свои, удобнее всего (из моего опыта) обмен между ними организовать с помощью объектов MailSlot

// Открываем MailSlot
MailSlotHandle = CreateMailslot("\\\\.\\mailslot\\MyProgramMailSlot", sizeof(Str), 0, NULL);

дальше с ними как с файлами - ReadFile, WriteFile.
программа-сервер читает из мэйл-слота периодически и если там что-то есть - обрабатывает
программа-клиент пишет в мэйл-слот запрос
подробнее все написано в хелпе по Win32 API...
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Nov 13 2008, 12:36
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(Олег Хохлов @ Nov 12 2008, 22:51) *
Если обе программы - свои, удобнее всего (из моего опыта) обмен между ними организовать с помощью объектов MailSlot

// Открываем MailSlot
MailSlotHandle = CreateMailslot("\\\\.\\mailslot\\MyProgramMailSlot", sizeof(Str), 0, NULL);

дальше с ними как с файлами - ReadFile, WriteFile.
программа-сервер читает из мэйл-слота периодически и если там что-то есть - обрабатывает
программа-клиент пишет в мэйл-слот запрос
подробнее все написано в хелпе по Win32 API...

Можно куски программного кода для двух программ: передача, прием? Буду очень признателен.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 15:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016