2010-03-04 4 views
0

Я экспериментировал с отправкой сообщений из двух приложений .NET Windows Forms с использованием WM_COPYDATA, и он отлично работает.SendMessage в консольное приложение .NET

Я хотел бы знать, может ли это быть выполнено с помощью консольных приложений.

После того как функция SendMessage принимает дескриптор окна, как я могу получить дескриптор окна консольного приложения?

[DllImport("User32.dll")] 
public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam); 

Также мне нужно настроить какой-то цикл сообщений в консольном приложении, чтобы иметь возможность получать сообщения?

+0

@GX: в первой ссылке в моем ответе есть обновленная версия кода, который обслуживает службы и консоли Windows ... – t0mm13b

ответ

3

Наиболее распространенные методы IPC (кроме WM_COPYDATA) представляют собой файлы с памятью и именованные каналы. Я предлагаю вам проверить последнее.

MSDN имеет example of named-pipe communication. В частности, классы, которые вам нужно использовать, - NamedPipeServerStream и NamedPipeClientStream, которые ведут себя в основном как обычные сетевые потоки после их создания.

Приятно, что он также работает по сети, хотя вы, очевидно, можете использовать его и на одной машине.

Настройка фактического цикла сообщений Windows в консольном приложении сложна, если не сказать больше. Если вам действительно нужно это сделать, вот довольно длинный article on the subject. Я бы настоятельно рекомендовал использовать именованные каналы, если все, что вы хотите сделать, это передача данных; если вам действительно не нужно обрабатывать стандартные сообщения Windows, это не будет стоить усилий.

+0

Да, я слышал о Named Pipes, никогда не пытался их реализовать. Спасибо за хорошие ссылки на ресурсы –

1

@ tommieb75: XDMessaging на самом деле моя библиотека :) WM_COPYDATA не работает для консольных приложений, поскольку они не имеют сообщение насос. Однако в библиотеке включена реализация IPC на основе IOStream, которая работает для консольных приложений и служб. http://thecodeking.github.com/XDMessaging.Net/

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. –

+0

Мне не хватило репутации во время публикации, чтобы добавить комментарий. – TheCodeKing

Смежные вопросы