SendMessage для консольного приложения .NET - PullRequest
1 голос
/ 04 марта 2010

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 04 марта 2010

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

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

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

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

2 голосов
/ 25 марта 2010

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

1 голос
/ 04 марта 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...