2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
|
||||||
1 | ||||||
Как передать сообщение из одной программы в другую?22.03.2014, 15:01. Показов 5996. Ответов 8
Метки нет (Все метки)
Например , у меня есть такой кусок кода:
Мне нужно эти значения этих хендлов передать в другую программу ( в виде чисел , чтобы выводились в окне ) . Не могу понять, как это сделать . Нужно создавать 2 программы ? Или какую функцию для этого нужно использовать ? Помогите , пожалуйста .
0
|
22.03.2014, 15:01 | |
Ответы с готовыми решениями:
8
Как передать данные с одной программы в другую? Как передать информацию из одной программы в другую Передать переменную из одной программы в другую Передать значение переменной из одной программы в другую |
Ушел с форума
|
|
22.03.2014, 20:29 | 2 |
Обмен данными между процессами:
Разделяемая память (или отображаемые в память файлы); Каналы (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 [ТС] | 3 | |||||
Мне скорее всего нужно через оконное сообщение ,через функцию SendMessage
В общем ,я создал одну программу , в которой создаётся ListBox с заголовками всех окон в системе :
конкретного плана нету ; это нужно создавать отдельно проект ещё один или как? помогите , пожалуйста , я уже в тупике просто
0
|
Ушел с форума
|
|
22.03.2014, 21:55 | 4 |
Можно и SendMessage, хотя для обмена данными между процессами
это далеко не лучший вариант. Там есть специальное сообщение - 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 [ТС] | 5 | |||||||||||||||
мне нужно именно через SendMessage
да, я читал про WM_COPYDATA , но немного запутался с обработкой этого сообщения вот код программы- отправителя :
Помогите, пожалуйста , я не знаю, что дальше нужно делать уже . Заранее спасибо! Добавлено через 1 час 33 минуты Я уже немного изменил текст наверное , здесь нужно, чтобы первая программа ничего не выводила , а только находила заголовки ( убрал WM_CREATE) проблема со вторым приложением : ругается на IParam ( это же получается указатель на место , куда я должен впихнуть список?) ругается скорее всего из-за того , что не выделил память на список думаю , нужно чтобы было так: 1-е приложение ничего не выводит на экран, только заполняет перечень заголовков окон в памяти и передаёт его посредством WM_COPYDATA во второе приложение. 2-е приложение получивши сообщение WM_COPYDATA выделяет из него строки и выводит в листбокс как выделить память ?? Очень прошу Вашей помощи ! Голова кипит уже((
0
|
Ушел с форума
|
|
23.03.2014, 13:43 | 6 |
Здесь попытка передать в другой процесс хэндл лист-бокса.
Смысла в этом нет никакого. Нужно передавать не хэндл, а сами данные, которые находятся в лист-боксе. Например, сформировать массив строк, разделенных нулями, с двойным нулем на конце (null-terminated string array) и записать указатель на его начало в lpData, а размер (в байтах) - в cbData. Добавлено через 1 минуту Должно быть не IParam, а lParam. Смотрите объявление аргументов функции WndProc. Добавлено через 1 минуту И отправку сообщения WM_COPYDATA лучше делать из оконной процедуры, а не на выходе из нее, когда никакого дочернего лист-бокса уже быть не может.
1
|
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
|
||||||
23.03.2014, 16:03 [ТС] | 7 | |||||
спасибо
вот так нужно делать?
Помогите, пожалуйста , хоть немного, дописать это всё запутался совсем -что и куда( Добавлено через 1 час 58 минут не поможете?
0
|
Ушел с форума
|
|
23.03.2014, 16:52 | 8 |
Дык уже помогаю. Или помощь тогда в чем должна заключаться ?
Программа А должна передать в программу Б какие-то данные посредством оконного сообщения WM_COPYDATA. Ок, сначала эти данные нужно сериализовать, то есть, преобразовать в "плоский" формат, который можно сохранять на диске или отдавать в другой процесс. К примеру, нельзя просто передать указатель на строку в другой процесс, т.к. там этот указатель будет указывать на что-то другое (или, что вероятнее всего, в "пустоту"). Нужно передавать саму строку. И т.д. Если требуется передать несколько строк, можно соединить их в один буфер, разделив нулями. Дальше это все "запаковывается" в структуру COPYDATASTRUCT и вызывается SendMessage.
0
|
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
|
|
23.03.2014, 18:00 [ТС] | 9 |
Спасибо за разъяснения. Но у меня возникают проблемы при создании этого самого массива, чтобы указать его для p.IpData . Не пойму , как его создать и как впихнуть в него инфу с listbox-а
Скорее всего опыта не хватает
0
|
23.03.2014, 18:00 | |
23.03.2014, 18:00 | |
Помогаю со студенческими работами здесь
9
из одной программы в другую передать некоторые данные Из одной программы передать значение переменной в другую программу (WM_COPYDATA) Как передать Dictionary с одной формы на другую? Как передать массив из одной функции в другую? Как из одной формы передать данные в другую Как передать данные из одной формы в другую? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |