Автор | Сообщение |
|
| постоянный участник
|
Пост N: 2200
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.05.12 10:52. Заголовок: Как передать данные из одной программы в другую ?
Всем привет... Есть ли механизм передачи данных между программами ? Допустим прога на МиниГуи запустила терминалку. Как узнать что терминалка нормально запустилась ?
|
|
|
Ответов - 59
, стр:
1
2
3
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 5172
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.11.16 00:09. Заголовок: Петр пишет: Только ..
Петр пишет: цитата: | Только не нужно его COMM - называть (у меня, почему-то ассоциация с COM портом, хотя понимаю, что это communication), лучше IPC (Inter-process communication). |
| Да так Григорий назвал, не я. Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 1333
Зарегистрирован: 09.10.06
|
|
Отправлено: 13.11.16 00:25. Заголовок: SergKis пишет: Григ..
SergKis пишет: цитата: | Григорий постоянно оптимизирует либу, борется с лишними включениями. Замусорить легко, вычищать сложно. |
| Ок. Я знаю позицию Григория. Лишнее или не лишнее - вопрос дискуссий.
|
|
|
|
| постоянный участник
|
Пост N: 5177
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.11.16 14:29. Заголовок: Вопрос дилетанта по ..
Вопрос дилетанта по окнам: SET EVENTS FUNCTION TO MYEVENTS можно назначать любому окну в программе ? И соответсвенно WM_COPYDATA будет обрабатываться в этом окне ? А то не хочу (неудобно) делать приёмку MAIN окном.
|
|
|
|
| постоянный участник
|
Пост 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 в глобальную переменную и больше ничего.
|
|
|
|
| постоянный участник
|
Пост N: 1342
Зарегистрирован: 09.10.06
|
|
Отправлено: 24.11.16 14:53. Заголовок: Andrey пишет: А то ..
Andrey пишет: цитата: | А то не хочу (неудобно) делать приёмку MAIN окном. |
| Это что прикол такой?
|
|
|
|
| постоянный участник
|
Пост N: 5178
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.11.16 16:48. Заголовок: Петр пишет: Это что..
Петр пишет: Да не прикол. Хочу в другом окне WINDOWTYPE STANDARD принимать/обрабатывать WM_COPYDATA из терминалки. Из-за этого и спрашиваю, возможно ли обрабатывать событие из терминалки по этому окну ? Если нельзя, то нельзя. Будет тогда обрабатывать MAIN окно.
|
|
|
|
| постоянный участник
|
Пост 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 делает то, что делает.
|
|
|
|
| постоянный участник
|
Пост 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 ) т.е. я могу отправлять сообщение не приложению, а по хендлу любому окну приложения. Правильно или нет ?
|
|
|
|
| постоянный участник
|
Пост 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 или что то др. придумай
|
|
|
|
| постоянный участник
|
Пост N: 1346
Зарегистрирован: 09.10.06
|
|
Отправлено: 24.11.16 18:10. Заголовок: Еще раз уточните про..
Еще раз уточните про неудобно обрабатывать в главном окне. Мне этот момент не понятен. Andrey пишет: цитата: | т.е. я могу отправлять сообщение не приложению, а по хендлу любому окну приложения. Правильно или нет ? |
| Вы отправляете сообщение окну другого приложения, любому окну другого приложения, которое захочет с вами общаться. Использовать WM_COPYDATA для передачи данных между окнами одного сообщения потерпит неудачу, система сочтет такое поведение странным и просто ничего не будет посылать. hWnd := FindWindow( cAppTitleServer ) - вместо cAppTitleServer - можете ставить, что угодно, лишь бы нашли.
|
|
|
|
| постоянный участник
|
Пост N: 5180
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.11.16 18:49. Заголовок: SergKis пишет: Так ..
Петр пишет: цитата: | Еще раз уточните про неудобно обрабатывать в главном окне. Мне этот момент не понятен. |
| У меня отдельное окно для отображения кол-ва отправленных записей на сервер ЛетоДБ по таймеру и это же окно занимается отправкой записей на сервер. Зачем мне делать обработку события в MAIN окне, если логичней делать это в окне отправки. SergKis пишет: цитата: | Так делай, обработчик в твоих руках, команды\ф-ии минигуи ты знаешь. |
| Понял. Спасибо ! Спасибо всем за разъяснения.
|
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
|
| постоянный участник
|
Пост N: 1347
Зарегистрирован: 09.10.06
|
|
Отправлено: 24.11.16 19:52. Заголовок: Вы, что пытаетесь у ..
Вы, что пытаетесь у всех распросить, что вы там в примере написали? Andrey пишет: цитата: | Я так понял что для проверки получения: |
| Для идентификации принятых данных: если у вас на компе нет больше установленных программ или вы тщательно отследили их поведение: можете игнорировать (как вы и делали сначала). Кроме 777 - любое число от 0 до 4294967295.
|
|
|
|
| постоянный участник
|
Пост N: 1348
Зарегистрирован: 09.10.06
|
|
Отправлено: 24.11.16 20:09. Заголовок: Andrey пишет: Зачем..
Andrey пишет: цитата: | Зачем мне делать обработку события в MAIN окне, если логичней делать это в окне отправки. |
| Еще раз - обработку события вы делаете в функции обработчике, не зависимо от того, как вы представляете работу minigui. Из функции обработчика вам доступно управление видом всех окон вашей программы. Так, что поменять какой-нибудь label вы можете сразу во всех окнах. Главное. что бы вы не перехватывали ненужных вам событий. И если ID не 777 ( или любое другое число от 0 до 4294967295) не забирайте чужих данных, наоборот если это ваши данные возвратите 1, Windows поймет, что доставка состоялась. Кстати, надеюсь вы заметили, что клиент и сервер должны знать ID друг друга. И еще не факт, что чужими данными ваша программа не подавиться, неправильно их интерпретировав и обработав.
|
|
|
|
| постоянный участник
|
Пост N: 5182
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.11.16 11:32. Заголовок: Спасибо за разъяснен..
Спасибо за разъяснения. Порой мои вопросы бывают и тупыми, но хочется понять как и что работает.
|
|
|
|
| постоянный участник
|
Пост N: 5242
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.12.16 11:36. Заголовок: Можно ли программе з..
Можно ли программе запущенной на сервере передать данные с клиентской программы напрямую ? Т.е. без всяких файлов и т.д. - как уже сделали вместе в предыдущем случае !
|
|
|
|
| постоянный участник
|
Пост N: 1286
Зарегистрирован: 27.01.07
|
|
Отправлено: 11.12.16 17:26. Заголовок: Andrey пишет: Можно..
Andrey пишет: цитата: | Можно ли программе запущенной на сервере передать данные с клиентской программы напрямую ? Т.е. без всяких файлов и т.д. - как уже сделали вместе в предыдущем случае ! |
| Они на разных компьютерах?
|
|
|
|
| |
Пост N: 6190
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.16 17:51. Заголовок: Andrey HbNetIO проб..
Andrey HbNetIO пробовал ? PS А вообще не совсем понятна задача...
|
|
|
|
| постоянный участник
|
Пост N: 5243
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.12.16 19:21. Заголовок: Dima пишет: А вообщ..
Dima пишет: цитата: | А вообще не совсем понятна задача... |
| Входящие и Исходящие документы. Задача информер на клиенте, показывает по таймеру кол-во просроченных/не выполненных/выполненных документов (записей) или при запросе список этих записей. На сервере стоит задача сервер (просчитывает по оператору его записи), при запросе клиентом предает ему общее кол-во или список записей для этого оператора. P.S. Нашёл - MiniGUI\SAMPLES\Advanced\NETIO_2. То что надо !
|
|
|
Ответов - 59
, стр:
1
2
3
All
[только новые]
|
|