On-line: PSP, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 2200
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.05.12 10:52. Заголовок: Как передать данные из одной программы в другую ?


Всем привет...

Есть ли механизм передачи данных между программами ?
Допустим прога на МиниГуи запустила терминалку.
Как узнать что терминалка нормально запустилась ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 59 , стр: 1 2 3 All [только новые]


постоянный участник




Пост N: 5172
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.11.16 00:09. Заголовок: Петр пишет: Только ..


Петр пишет:

 цитата:
Только не нужно его COMM - называть (у меня, почему-то ассоциация с COM портом, хотя понимаю, что это communication), лучше IPC (Inter-process communication).


Да так Григорий назвал, не я.
Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1333
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 13.11.16 00:25. Заголовок: SergKis пишет: Григ..


SergKis пишет:

 цитата:
Григорий постоянно оптимизирует либу, борется с лишними включениями. Замусорить легко, вычищать сложно.



Ок. Я знаю позицию Григория. Лишнее или не лишнее - вопрос дискуссий.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5177
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.16 14:29. Заголовок: Вопрос дилетанта по ..


Вопрос дилетанта по окнам:
SET EVENTS FUNCTION TO MYEVENTS можно назначать любому окну в программе ?
И соответсвенно WM_COPYDATA будет обрабатываться в этом окне ?

А то не хочу (неудобно) делать приёмку MAIN окном.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1341
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 24.11.16 14:53. Заголовок: Andrey пишет: SET E..


Andrey пишет:

 цитата:
SET EVENTS FUNCTION TO MYEVENTS можно назначать любому окну в программе ?


Нет

Каждое окно в MiniGUI создается с оконной процедурой WndProc. При запуске WndProc проверяет глобальную переменную sEVENTSFUNC.
Если эта переменная содержит имя Harbour функции, WndProc запускает ее на исполнение с параметрами
HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam;
если нет - выполняется обработчик по умолчанию - функция Events.

Если Events или ваша функция-обработчик в качестве результата вернут 0, WndProc вызовет обработчик по умолчанию для Windows -DefWindowProc (что бы программа не зависла - выполнялись какие-то елементарные стандартные действия.)
Поэтому думайте, что возвращать.

Команда SET EVENTS FUNCTION TO MYEVENTS как раз помещает имя функции MYEVENTS в глобальную переменную и больше ничего.




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1342
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 24.11.16 14:53. Заголовок: Andrey пишет: А то ..


Andrey пишет:

 цитата:
А то не хочу (неудобно) делать приёмку MAIN окном.


Это что прикол такой?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5178
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.16 16:48. Заголовок: Петр пишет: Это что..


Петр пишет:

 цитата:
Это что прикол такой?


Да не прикол.
Хочу в другом окне WINDOWTYPE STANDARD принимать/обрабатывать WM_COPYDATA из терминалки.
Из-за этого и спрашиваю, возможно ли обрабатывать событие из терминалки по этому окну ?
Если нельзя, то нельзя. Будет тогда обрабатывать MAIN окно.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1345
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 24.11.16 17:29. Заголовок: Andrey пишет: Хочу ..


Andrey пишет:

 цитата:
Хочу в другом окне WINDOWTYPE STANDARD принимать/обрабатывать WM_COPYDATA из терминалки.



WM_COPYDATA передает данные от одного приложения к другому, тип окон при этом значения не имеет.

В догонку: при этом принимающее окно не обязательно дожно быть видимым (Hide).
Вы можете обрабатывать эти сообщения в MYEVENTS, но тем не менее
SET EVENTS FUNCTION TO MYEVENTS делает то, что делает.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5179
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.16 18:00. Заголовок: Петр пишет: WM_COPY..


Петр пишет:

 цитата:
WM_COPYDATA передает данные от одного приложения к другому


Чуток не понятно....
hWnd := FindWindow( cAppTitleServer )
Мы же передаём не приложению, а по хендлу окна
// Transfer data to window "Server"
SendMessageData( hwnd, cVal, nID )


т.е. я могу отправлять сообщение не приложению, а по хендлу любому окну приложения.
Правильно или нет ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1311
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.11.16 18:06. Заголовок: Andrey пишет Хочу в ..


Andrey пишет
 цитата:
Хочу в другом окне


Так делай, обработчик в твоих руках, команды\ф-ии минигуи ты знаешь. Так, к примеру
If _IsWindowDefined('Form_10')
Form_10.Buf.Cargo := <данные wm_copydata>
Postmessage(Form_10.Handle, WM_KEYDOWN, VK_F20, 0)
EnfIf
на окне у тебя
@ 0,0 LABEL Buf ...
This.Buf.Cargo := ''
_DefineHotKey ( ThisWindow.Name, 0 , VK_F20 , {|| MyCopyData()} )
и
Func MyCopyData()
If ! empty(This.Buf.Cargo)
... прием
This.Buf.Cargo := ''
EndIf
Return Nil
или что то др. придумай



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1346
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 24.11.16 18:10. Заголовок: Еще раз уточните про..


Еще раз уточните про неудобно обрабатывать в главном окне.
Мне этот момент не понятен.

Andrey пишет:

 цитата:
т.е. я могу отправлять сообщение не приложению, а по хендлу любому окну приложения.
Правильно или нет ?



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

hWnd := FindWindow( cAppTitleServer ) - вместо cAppTitleServer - можете ставить, что угодно, лишь бы нашли.





Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5180
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.16 18:49. Заголовок: SergKis пишет: Так ..


Петр пишет:

 цитата:
Еще раз уточните про неудобно обрабатывать в главном окне.
Мне этот момент не понятен.


У меня отдельное окно для отображения кол-ва отправленных записей на сервер ЛетоДБ по таймеру и это же окно занимается отправкой записей на сервер.
Зачем мне делать обработку события в MAIN окне, если логичней делать это в окне отправки.

SergKis пишет:

 цитата:
Так делай, обработчик в твоих руках, команды\ф-ии минигуи ты знаешь.


Понял. Спасибо !
Спасибо всем за разъяснения.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5181
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.16 19:05. Заголовок: Ещё вопрос возник. А..


Ещё вопрос возник. А зачем нужен 3-параметр при передачи ?
// Transfer data to window "Server"
SendMessageData( hwnd, cVal, nID )

Я так понял что для проверки получения:
IF nDataID == APP_ID // it's our data?

А какие варианты кроме 777 можно использовать ?
#define APP_ID 777


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1347
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 24.11.16 19:52. Заголовок: Вы, что пытаетесь у ..


Вы, что пытаетесь у всех распросить, что вы там в примере написали?

Andrey пишет:

 цитата:
Я так понял что для проверки получения:


Для идентификации принятых данных: если у вас на компе нет больше установленных программ или вы тщательно отследили их поведение: можете игнорировать (как вы и делали сначала).

Кроме 777 - любое число от 0 до 4294967295.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1348
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 24.11.16 20:09. Заголовок: Andrey пишет: Зачем..


Andrey пишет:

 цитата:
Зачем мне делать обработку события в MAIN окне, если логичней делать это в окне отправки.


Еще раз - обработку события вы делаете в функции обработчике, не зависимо от того, как вы представляете работу minigui. Из функции обработчика вам доступно управление видом всех окон вашей программы. Так, что поменять какой-нибудь label вы можете сразу во всех окнах.

Главное. что бы вы не перехватывали ненужных вам событий.
И если ID не 777 ( или любое другое число от 0 до 4294967295) не забирайте чужих данных, наоборот если это ваши данные возвратите 1, Windows поймет, что доставка состоялась.

Кстати, надеюсь вы заметили, что клиент и сервер должны знать ID друг друга.

И еще не факт, что чужими данными ваша программа не подавиться, неправильно их интерпретировав и обработав.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5182
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.11.16 11:32. Заголовок: Спасибо за разъяснен..


Спасибо за разъяснения.
Порой мои вопросы бывают и тупыми, но хочется понять как и что работает.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5242
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.12.16 11:36. Заголовок: Можно ли программе з..


Можно ли программе запущенной на сервере передать данные с клиентской программы напрямую ?
Т.е. без всяких файлов и т.д. - как уже сделали вместе в предыдущем случае !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1286
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 11.12.16 17:26. Заголовок: Andrey пишет: Можно..


Andrey пишет:

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


Они на разных компьютерах?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6190
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.16 17:51. Заголовок: Andrey HbNetIO проб..


Andrey
HbNetIO пробовал ?

PS
А вообще не совсем понятна задача...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5243
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.12.16 19:21. Заголовок: Dima пишет: А вообщ..


Dima пишет:

 цитата:
А вообще не совсем понятна задача...


Входящие и Исходящие документы.
Задача информер на клиенте, показывает по таймеру кол-во просроченных/не выполненных/выполненных документов (записей) или при запросе список этих записей.
На сервере стоит задача сервер (просчитывает по оператору его записи), при запросе клиентом предает ему общее кол-во или список записей для этого оператора.

P.S. Нашёл - MiniGUI\SAMPLES\Advanced\NETIO_2. То что надо !

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 59 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 247
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет