DDE без окон (и дверей)
От: Hayabusa Россия  
Дата: 08.01.19 23:51
Оценка:
Привет всем, проблема такая:

Есть очень старое оконное приложение, которое раздает некоторые данные по DDE в горячем режиме.
Написал тестовый диаложек — все отлично, данные получаю в callback.

Но мне нужно что бы это работало в моей win-службе, у которой, естественно, оконной процедуры нет.
Вот собственно и вопрос — как это можно там реализовать? Надо какой то цикл прокачки сообщений, или как?
Re: DDE без окон (и дверей)
От: Hayabusa Россия  
Дата: 09.01.19 00:38
Оценка:
Так, какой то прогресс уже есть.

Пока что пробую в консольном приложении, делаю так:
MSG msg;
while ( !_kbhit() )
{
  if (::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
  {
    ::DispatchMessage(&msg);
  }
}


Работает, данные по DDE получаю в callback.
Корректен ли этот цикл сообщений? Планирую его перенести в свою win-службу (без _kbhit, естественно).

upd: через цикл проскакивает только WM_DDE_DATA, других вроде нет сообщений.
Отредактировано 09.01.2019 0:59 Hayabusa . Предыдущая версия .
Re: DDE без окон (и дверей)
От: AndrewJD США  
Дата: 09.01.19 01:07
Оценка:
Здравствуйте, Hayabusa, Вы писали:

H>Есть очень старое оконное приложение, которое раздает некоторые данные по DDE в горячем режиме.

H>Написал тестовый диаложек — все отлично, данные получаю в callback.

H>Но мне нужно что бы это работало в моей win-службе, у которой, естественно, оконной процедуры нет.

H>Вот собственно и вопрос — как это можно там реализовать? Надо какой то цикл прокачки сообщений, или как?

Не совсем понятно, что нужно в итоге получить. В какой сессии должно быть запущенно старое оконное приложение?

Как вариант, написать приложение которое работает с со старым используя DDE и перенаправляет данные в сервис используя на выбор: COM, named pipes, mailslots, memory mapped files, sockets, etc.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: DDE без окон (и дверей)
От: Hayabusa Россия  
Дата: 09.01.19 01:12
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Не совсем понятно, что нужно в итоге получить. В какой сессии должно быть запущенно старое оконное приложение?

AJD>Как вариант, написать приложение которое работает с со старым используя DDE и перенаправляет данные в сервис используя на выбор: COM, named pipes, mailslots, memory mapped files, sockets, etc.

'Старое оконное приложение' будет запущено в пользовательской сессии.
Моя служба — обычная служба windows, в ней и хочу реализовать получение данных через DDE из того оконного приложения.
Да вот хотелось бы без всяких дополнительных затычек.
Еще пока не знаю, достучится ли моя служба до DDE-канала в пользовательской сессии, буду пробовать.
Re[3]: DDE без окон (и дверей)
От: AndrewJD США  
Дата: 09.01.19 01:21
Оценка: 2 (1) +1
Здравствуйте, Hayabusa, Вы писали:

H>Еще пока не знаю, достучится ли моя служба до DDE-канала в пользовательской сессии, буду пробовать.


Не достучится.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[4]: DDE без окон (и дверей)
От: Hayabusa Россия  
Дата: 09.01.19 01:26
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Не достучится.


Хреново Значит надо лепить какой-то thunk.
Re[5]: DDE без окон (и дверей)
От: bnk СССР http://unmanagedvisio.com/
Дата: 09.01.19 07:59
Оценка:
Здравствуйте, Hayabusa, Вы писали:

H>Здравствуйте, AndrewJD, Вы писали:


AJD>>Не достучится.


H>Хреново Значит надо лепить какой-то thunk.


Приложение в автозапуске с нормальным окном (тот самый диаложек например)?
Re[6]: DDE без окон (и дверей)
От: Hayabusa Россия  
Дата: 09.01.19 08:24
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Приложение в автозапуске с нормальным окном (тот самый диаложек например)?


Ну да. Да не важно какой, его же делать надо
Проверил, да, из службы не виден dde канал программы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.