SendMessage WM_COPYDATA msg从VC到BCB:失败,但是BCB到BCB:通过

问题描述 投票:-1回答:1

我不明白为什么从VC ++应用程序(Master)向BCB应用程序(Slave)发送WM_COPYDATA失败,但是从BCB应用程序(Master)到BCB应用程序(Slave)传递失败。我已经在BCB和VC ++中以调试模式验证了HWND,它们都是相同的值(0x00030BEE)。

以下是我的代码,非常简单

VC Master(.cpp)(32位)

char ss[] = "1234";
HWND hwnd = ::FindWindowA(NULL, "12345678");//12345678 = Slave Window
COPYDATASTRUCT copydata;
memset(&copydata, 0, sizeof(copydata));
copydata.dwData = 0;
copydata.cbData = strlen(ss);
copydata.lpData = ss;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)&copydata);

BCB主(.cpp)(32位)

char ss[] = "1234";
HWND hwnd = ::FindWindow(NULL, "12345678");//12345678 = Slave Window
COPYDATASTRUCT copydata;
memset(&copydata, 0, sizeof(copydata));
copydata.dwData = 0;
copydata.cbData = strlen(ss);
copydata.lpData = ss;
::SendMessage(hwnd, WM_COPYDATA, (WPARAM)Application->Handle, (LPARAM)&copydata);

VC ++和BCB之间唯一的区别是GetSafeHwnd()Application->Handle。调用FindWindow()后,VC ++和BCB中的HWND是相同的值(0x00030BEE)。

BCB从站(.h)(32位)

void __fastcall OnCopyData(TMessage &Msg);
BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(WM_COPYDATA,TMessage, OnCopyData)
END_MESSAGE_MAP(TForm)

BCB从站(.cpp)

void __fastcall TForm1::OnCopyData(TMessage &Msg)
{
    ::OutputDebugString("123");
}

BCB从站可以从BCB主站获取消息,并输出123消息。但是它无法从VC ++主站获取消息。

我很困惑。有人知道如何解决吗?

环境:Win7,专业版,64位

image

visual-c++ c++builder sendmessage
1个回答
0
投票

从Remy Lebeau的注释中,更改可视c ++设置或调用ChangeWindowMessageFilterEx可以解决此问题。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.