2010-10-08 2 views
0

У меня есть расширение оболочки ATLCOM, которое добавляет расширение правой кнопкой мыши в проводник Windows. Как передать сообщение из моей DLL в другое приложение MFC.Как передать сообщение из DLL в приложение

To Sumarize, я хочу передать сообщение из DLL в приложение MFC.

+1

Эмм ... Почему 'PostMessage()' не хватает? – sharptooth

+0

@ sharptooth, вы имеете в виду, что я опубликую сообщение из DLL? Как я могу извлечь его в приложении MFC? – Simsons

+0

Это вариант. Вы отправляете сообщение, и это приложение извлекает его в свой цикл сообщений. – sharptooth

ответ

3

Вы можете использовать Windows API SendMessage или PostMessage.

+0

Как получить mssage в приложении MFC? При отправке или отправке сообщения, куда или кому я должен отправлять или отправлять? – Simsons

+1

@Subhen: с картой сообщений. См. Http://vcfaq.mvps.org/mfc/12.htm для объяснения. Я предполагаю, что вы уже знаете другое приложение (т. Е. Оно запускается, и у вас есть HWND. Невозможно отправлять сообщения зомби в конце концов) – MSalters

1

Вы пытались использовать сообщения Windows?

Вы можете определить у вас есть пользовательские сообщения, как это:

const UINT WM_YOUR_CUSTOM_MESSAGE = ::RegisterWindowMessage(_T("Your_custom_message")); 

вы получите сообщение в стандартном WindowProc() функция:

WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

Вы можете добавить один переопределение CWnd :: WindowProc() в принимающем приложении (используйте classwizard в диалоговом окне в диалоговом приложении MFC или в MainFrm в приложении Single/Multiple Document MFC)

Вы используете го сообщения на все окна, как это:

ULONG ulRC = BSM_APPLICATIONS; 
BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_FORCEIFHUNG, // do not send message to this process and don't hang 
         &ulRC,     // broadcast only to applications 
         WM_YOUR_CUSTOM_MESSAGE,  // message registered in previous step 
         0,      // wParam message-specific value 
         0);      // lParam message-specific value 

Если вам нужно передать какую-то информацию с сообщением, вы можете также использовать значение WPARAM и LPARAM в сообщении.

+0

Но как я могу извлечь этот mesaage из другого приложения – Simsons

1

В текущих ответах есть одно большое предположение. Обычно вы отправляете сообщения на процессов, а не на приложения. Это огромная разница. Может быть ноль, один или несколько экземпляров приложения MFC.

В случае нулевых приложений DLL необходимо будет вызвать CreateProcess. CreateProcess позволяет DLL передавать аргументы командной строки вашему приложению MFC.

В случае одного приложения MFC будут работать предлагаемые выше решения на основе сообщений.

В случае использования нескольких приложений MFC у них будут разные HWND. DLL выбирает приложение (ы), выбирая, для какого HWND отправить сообщение. Логика, с помощью которой выбирается HWND, выходит за рамки этого вопроса. Одним из распространенных решений является просто отправить сообщение HWND для всех запущенных экземпляров.

Выяснить, сколько экземпляров приложения, работающих под управлением достигается за счет Process Enumeration

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