求助大神,为什么DefWndProc向窗体发送的消息没有收到?

cucou 2013-12-26 03:49:00
我想用DefWndProc向一个窗体发送信息,如A向B发送:
A窗体: 
const int WM_COPYDATA = 0x004A;

private struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}

//发送内容Content
string FormName = "B";
IntPtr handle = FindWindow(null, windowsName);

if (handle != IntPtr.Zero)
{
byte[] s = Encoding.Default.GetBytes(Content);
int len = s.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = Content;
cds.cbData = len + 1;
SendMessage(handle, WM_COPYDATA, 0, ref cds);
}


B窗体: 
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
string receiveMsg = mystr.lpData;

MessageBox.Show(receiveMsg);
break;
default:
base.DefWndProc(ref m);
break;
}
}

情况就是这样,B窗体里面完全没有反应,我在DefWndProc这里加了断点,就没有m.Msg=WM_COPYDATA的时候,switch不断的在default: 里循环。。。
求各位大神帮帮我,实在不知道怎么回事
...全文
200 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cucou 2013-12-26
  • 打赏
  • 举报
回复
找到问题了,真是操蛋啊,原来我的form是用了一个别人的窗体皮肤,结果。。。 我用原先的窗体public partial class B : Form这样就可以收到,真是麻烦大家了。。。
dreamofchina 2013-12-26
  • 打赏
  • 举报
回复
你先别用FindWindow 你把b的handle直接传给A,然后在A中用拿到的b的handle发一下看看能收到不,如果能收到,就说明你findwindow的问题,如果收不到,就应该是你a窗口消息队列里面就压根没有你发的消息
cucou 2013-12-26
  • 打赏
  • 举报
回复
handle是没有问题的,我刚刚看了
bdmh 2013-12-26
  • 打赏
  • 举报
回复
先确认你的handle是否找的正确

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧