как отправить сообщение из одного консольного приложения Windows в другое?

У меня есть консольное приложение Windows, которое запускает дочерний процесс. Как я могу отправить сообщение дочернему процессу? Я нашел такие функции, как PostMessage () / PeekMessage () - это то, что мне нужно, но, как я понимаю, он используется внутри одного приложения и использует HWND для идентификации целевого окна (у меня нет окон в приложении). Также я читал материалы о ipc, например именованные каналы тоже требуют HWND. Я хочу что-то вроде этого:

[program 1]

int main()
{
    CreateProcess(.., processInfo);
    SendMessage(processId, message);
}

[program 2]

int main()
{
    while(1)
    {
//      do thw work
        Sleep(5 * 1000);
//      check message
        if(PeekMessage(message,..))
        {
        break;
        }
    }
}

Дочерний процесс должен получить сообщение о том, что он должен завершить свою работу, а не немедленно, а завершить текущую итерацию. Вот почему я не использую сигналы, и блокировка «получения сообщения» тоже не подходит.


person diana-pure    schedule 17.11.2013    source источник
comment
Уже нашел PostThreadMessage (), помогло! Спасибо ;)   -  person diana-pure    schedule 17.11.2013


Ответы (2)


Попробуйте создать сообщение- Только окно.

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

person Asaf    schedule 17.11.2013

В программе 1 вы должны использовать функцию FindWindow, чтобы получить дескриптор программы 2.

а затем используйте функцию SendMessage

[программа 1]

    int main()
    {
     HWND hwnd=FindWindow(NULL,formText);//formText name of program 2
        if(hwnd!=0)
        {
            COPYDATASTRUCT cd;
        cd.dwData = 100;
        cd.cbData = 100;
        cd.lpData = msg;                //msg additional data
        SendMessage(hwnd, WM_COPYDATA, 0, (LPARAM)(&cd));
        }
    }

[program 2]

    void handlemessage(MSG *msg)
    {
        //handle
    }


    int main()
   {

        MSG msg;
        while (GetMessage(&msg, NULL, 0, 0))
        {
           handlemessage(&msg);
        }
    }
person Patato    schedule 17.11.2013