Используйте WM_COPYDATA для отправки данных между процессами

Я хочу отправить текст между процессами. Я нашел много примеров этого, но ни один, что я могу получить работу. Вот то, что я имею до сих пор:

для передающей части:

COPYDATASTRUCT CDS;
CDS.dwData = 1;
CDS.cbData = 8;
CDS.lpData = NULL;
SendMessage(hwnd, WM_COPYDATA , (WPARAM)hwnd, (LPARAM) (LPVOID) &CDS);

часть получения:

case WM_COPYDATA:
COPYDATASTRUCT* cds = (COPYDATASTRUCT*) lParam;

Я не знаю, как создать COPYDATASTRUCT, я только что поместил что-то в это, кажется, работает. Когда отладка случая WM_COPYDATA выполняется, но снова я не знаю, что сделать с COPYDATASTRUCT.

Я хотел бы отправить текст между двумя процессами.

Поскольку можно, вероятно, сказать, что я только начинаю, я использую GNU Компилятор GCC в Коде:: Блоки, я стараюсь избегать MFC и зависимостей.

18
задан Charles Gargent 15 March 2010 в 23:10
поделиться

1 ответ

Пример использования сообщения см. В http://msdn.microsoft.com/en-us/library/ms649009 (VS.85) .aspx . Вы также можете посмотреть http://www.flounder.com/wm_copydata.htm .

Член dwData определяется вами. Думайте об этом как о перечислении типов данных, которое вы можете определить. Это все, что вы хотите использовать, чтобы определить, что данные представляют собой такую-то строку.

Элемент cbData - это размер в байтах данных, на которые указывает lpData . В вашем случае это будет размер строки в байтах.

Член lpData указывает на данные, которые вы хотите скопировать.

Итак, чтобы передать одну строку ....

LPCTSTR lpszString = ...;
COPYDATASTRUCT cds;
cds.dwData = 1; // can be anything
cds.cbData = sizeof(TCHAR) * (_tcslen(lpszString) + 1);
cds.lpData = lpszString;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)hwnd, (LPARAM)(LPVOID)&cds);

Затем, чтобы получить ее ....

COPYDATASTRUCT* pcds = (COPYDATASTRUCT*)lParam;
if (pcds->dwData == 1)
{
    LPCTSTR lpszString = (LPCTSTR)(pcds->lpData);
    // do something with lpszString...
}
21
ответ дан 30 November 2019 в 08:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: