2015-05-13 1 views
3

У меня есть два приложения, и мне нужно отправить «текстовые сообщения» между ними. Я пробовал PostMessage, но я могу только отправлять числа. Я использую lParam для переноса сообщения, и если я его изменю на string, я все равно получаю только цифры. Можно ли даже отправить строку, и если да, то как?Как отправить строку в другое окно?

код ниже:

public const int HWND_BROADCAST = 0xffff; 
public static readonly int WM_TEST = RegisterWindowMessage("WM_TEST"); 

[DllImport("user32")] 
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam); 

[DllImport("user32")] 
public static extern int RegisterWindowMessage(string message); 

код для отправки сообщения:

int message = 1234567890; 
PostMessage((IntPtr)HWND_BROADCAST, WM_TEST, IntPtr.Zero, (IntPtr)message); 

И получить сообщение:

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_TEST) 
    { 
     textBox1.AppendText(m.LParam.ToString() + Environment.NewLine); 
    } 

    base.WndProc(ref m); 
} 

Так что вопрос еще раз: как я могу отправить string между два приложения?

Спасибо!

+0

Проверьте [this] (https://gist.github.com/BoyCook/5075907) вне - особенно 'sendWindowsStringMessage'. – Zer0

+2

Именованные трубы, MSMQ, даже сокеты - всего лишь несколько способов высокого уровня для этого, я бы избегал сообщений с низким уровнем сообщений, если у вас есть контроль над реализацией в обеих программах. –

+0

Если вы маршалируете это правильно, вы можете отправить строки без проблем. Я думаю, что это пример Zer0. – MicroVirus

ответ

-1

RegisterWindowMessage проходит через очередь сообщений. Это не то, что вы хотите сделать.

Посмотрите на OLE. Это санкционированный маршрут.

0

Это выглядит как XY Problem.

Лучшим способом реализации межпроцессной связи является использование net sockets, которое может быть позже перенесено на удаленный межпроцессное взаимодействие. Вы в основном слушаете определенный порт в одном приложении и подключаетесь к этому порту из другого приложения, как если бы он был удаленным хостом в Интернете.

Другим способом реализации межпроцессного взаимодействия является использование Anonymous Pipes, который является механизмом окон для IPC.

Как правило, вы можете проверить множество различных методов IPC here.

Для этого не рекомендуется использовать Windows Messages, потому что это не то, для чего они предназначены. WM создаются для того, чтобы ОС могла уведомлять приложение Windowed о (в основном) взаимодействиях пользовательского интерфейса, даже если любое приложение может отправлять WM в другие приложения. У вас есть лучшие варианты для этого.

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