|
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
|
||||||
Как передать сообщение из одной программы в другую?22.03.2014, 15:01. Показов 6734. Ответов 8
Метки нет (Все метки)
Например , у меня есть такой кусок кода:
Мне нужно эти значения этих хендлов передать в другую программу ( в виде чисел , чтобы выводились в окне ) . Не могу понять, как это сделать . Нужно создавать 2 программы ? Или какую функцию для этого нужно использовать ? Помогите , пожалуйста .
0
|
||||||
| 22.03.2014, 15:01 | |
|
Ответы с готовыми решениями:
8
Как передать данные с одной программы в другую? Как передать информацию из одной программы в другую Передать переменную из одной программы в другую |
|
Ушел с форума
|
|
| 22.03.2014, 20:29 | |
|
Обмен данными между процессами:
Разделяемая память (или отображаемые в память файлы); Каналы (pipes); Мэйлслоты (mailslots); Файлы; Реестр; Оконные сообщения; Сокеты; COM/RPC; ... Interprocess Communications (MSDN) http://msdn.microsoft.com/en-u... 85%29.aspx
1
|
|
|
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
|
||||||
| 22.03.2014, 21:02 [ТС] | ||||||
|
Мне скорее всего нужно через оконное сообщение ,через функцию SendMessage
В общем ,я создал одну программу , в которой создаётся ListBox с заголовками всех окон в системе :
конкретного плана нету ; это нужно создавать отдельно проект ещё один или как? помогите , пожалуйста , я уже в тупике просто
0
|
||||||
|
Ушел с форума
|
||
| 22.03.2014, 21:55 | ||
|
это далеко не лучший вариант. Там есть специальное сообщение - WM_COPYDATA, подробности на MSDN: WM_COPYDATA message (Windows) http://msdn.microsoft.com/en-u... 85%29.aspx Одно приложение записывает данные в буфер, упаковывает все это в структуру COPYDATASTRUCT, находит окно второго приложения и шлет ему SendMessage с этим сообщением. Второе приложение обрабатывает сообщение и возвращает TRUE. Но я бы сделал по-другому, хотя бы и через разделяемую память. Это и надежнее, и быстрее, и концептуальнее (ну не предназначены оконные сообщения для межпроцессного обмена).
0
|
||
|
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
|
||||||||||||||||
| 23.03.2014, 13:33 [ТС] | ||||||||||||||||
|
мне нужно именно через SendMessage
да, я читал про WM_COPYDATA , но немного запутался с обработкой этого сообщения вот код программы- отправителя :
Помогите, пожалуйста , я не знаю, что дальше нужно делать уже . Заранее спасибо! Добавлено через 1 час 33 минуты Я уже немного изменил текст наверное , здесь нужно, чтобы первая программа ничего не выводила , а только находила заголовки ( убрал WM_CREATE) проблема со вторым приложением : ругается на IParam ( это же получается указатель на место , куда я должен впихнуть список?) ругается скорее всего из-за того , что не выделил память на список думаю , нужно чтобы было так: 1-е приложение ничего не выводит на экран, только заполняет перечень заголовков окон в памяти и передаёт его посредством WM_COPYDATA во второе приложение. 2-е приложение получивши сообщение WM_COPYDATA выделяет из него строки и выводит в листбокс как выделить память ?? Очень прошу Вашей помощи ! Голова кипит уже((
0
|
||||||||||||||||
|
Ушел с форума
|
|||
| 23.03.2014, 13:43 | |||
|
Смысла в этом нет никакого. Нужно передавать не хэндл, а сами данные, которые находятся в лист-боксе. Например, сформировать массив строк, разделенных нулями, с двойным нулем на конце (null-terminated string array) и записать указатель на его начало в lpData, а размер (в байтах) - в cbData. Добавлено через 1 минуту функции WndProc. Добавлено через 1 минуту И отправку сообщения WM_COPYDATA лучше делать из оконной процедуры, а не на выходе из нее, когда никакого дочернего лист-бокса уже быть не может.
1
|
|||
|
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
|
||||||
| 23.03.2014, 16:03 [ТС] | ||||||
|
спасибо
вот так нужно делать?
Помогите, пожалуйста , хоть немного, дописать это всё запутался совсем -что и куда( Добавлено через 1 час 58 минут не поможете?
0
|
||||||
|
Ушел с форума
|
||
| 23.03.2014, 16:52 | ||
|
Программа А должна передать в программу Б какие-то данные посредством оконного сообщения WM_COPYDATA. Ок, сначала эти данные нужно сериализовать, то есть, преобразовать в "плоский" формат, который можно сохранять на диске или отдавать в другой процесс. К примеру, нельзя просто передать указатель на строку в другой процесс, т.к. там этот указатель будет указывать на что-то другое (или, что вероятнее всего, в "пустоту"). Нужно передавать саму строку. И т.д. Если требуется передать несколько строк, можно соединить их в один буфер, разделив нулями. Дальше это все "запаковывается" в структуру COPYDATASTRUCT и вызывается SendMessage.
0
|
||
|
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
|
|
| 23.03.2014, 18:00 [ТС] | |
|
Спасибо за разъяснения. Но у меня возникают проблемы при создании этого самого массива, чтобы указать его для p.IpData . Не пойму , как его создать и как впихнуть в него инфу с listbox-а
Скорее всего опыта не хватает
0
|
|
| 23.03.2014, 18:00 | |
|
Помогаю со студенческими работами здесь
9
Передать значение переменной из одной программы в другую из одной программы в другую передать некоторые данные
Как передать Dictionary с одной формы на другую? Как передать массив из одной функции в другую? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|