Как я могу передать сообщение из DLL в приложение - PullRequest
0 голосов
/ 08 октября 2010

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

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

Ответы [ 3 ]

4 голосов
/ 08 октября 2010

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

2 голосов
/ 08 октября 2010

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

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

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

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

Определение количества запущенных экземпляров приложения достигается с помощью Перечисление процессов

2 голосов
/ 08 октября 2010

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

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

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

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

WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

Вы можете добавить один, переопределив функцию CWnd :: WindowProc () в своем принимающем приложении (используйте мастер классов в диалоговом окне в приложении с диалоговым окном MFC или в MainFrm в приложении 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 в сообщении.

...