两个进程之间的SendMessage WM_COPYDATA

时间:2016-03-08 10:39:17

标签: c++ string process sleep sendmessage

我必须将一个字符串从一个进程传递到另一个进程,因此我发送带有相关信息的WM_COPYDATA消息。接收器进程等待while循环并休眠500毫秒,直到收到消息。

我不知道为什么它不起作用。发件人进程在SendMessage上停止,因为接收者进程没有收到消息。当接收器上的循环由于超时而结束,并且接收者进程也结束时,发送者的SendMessage结束并且它可以继续运行。

这是相关代码。发件人流程:

COPYDATASTRUCT cp;
memset(&cp, 0, sizeof(COPYDATASTRUCT));
cp.cbData = 128;
cp.lpData = messageStr;
cp.dwData = 45382;
::SendMessage(receiverHWND, WM_COPYDATA, (WPARAM)0, (LPARAM)&cp);

接收程序:

// Define which function runs when a message WM_COPYDATA is sent
CopyDataHandler = onCopyData;

void onCopyData(COPYDATASTRUCT *cp)
{
    if (cp->lpData == NULL)
        return;

    if (cp->dwData == 45382) // means a message from the sender
    {
        strcpy(WinprocMessage, cp->lpData); 
        return;
    }
}

BOOL OnCopyData(HWND hWnd, HWND hwndFrom, PCOPYDATASTRUCT pcds)
{
    if(CopyDataHandler != NULL)
        CopyDataHandler(pcds);

    return TRUE;
}

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        HANDLE_MSG (hWnd, WM_COPYDATA, OnCopyData);
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}

(注意有两个功能:onCopyData和OnCopyData)

现在循环的代码:

    _num attempts = procTimeout * 2;
    while ((attempts-- > 0) && (WinprocMessage[0] == '\0'))
        Sleep(500);

那么,为什么它不起作用?是Sleep函数阻止其他进程SendMessage

此外,此代码适用于其他发件人进程。 (另一个是巨大的,我不知道这一切,无法猜出存在差异的地方)也许发送者进程不得不以某种方式RegisterWindowMessage

0 个答案:

没有答案