这个我参考了一篇文章,对其进行了修改。因为原链接是button触发的,我改为了定时器触发。
参考的文章链接:https://blog.csdn.net/winterye12/article/details/77370453
首先,对两个不同的APP之间进行定义。分为发送端和接收端。
发送端APP:FormA
接收端APP:FormB
发送端:
public partial class FormA : Form
{
private const int WM_USER = 0x87D0; //这个APP的自定义消息号
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern IntPtr SendMessage(int hWnd, int msg, IntPtr wParam, IntPtr lParam); //发送消息函数。
[DllImport("User32.dll", EntryPoint = "FindWindow")]
public FormA()
{
InitializeComponent();
}
private void timer_Message_Tick(object sender, EventArgs e) //定时器定时发送消息
{
int WINDOW_HANDLER;
int msgNum = 11111111; //要传输的数据,也可以是变量
WINDOW_HANDLER = FindWindow(null, "接收端");//通过窗口标题,获得句柄
SendMessage(WINDOW_HANDLER, WM_USER, new IntPtr(msgNum), IntPtr.Zero);
}
}
接收端:
public partial class FormB : Form
{
private const int WM_USER = 0x8060; //自定义的接收端的号子,其实就像姓名牌一样。
//原文此处与发送端用一样的号子,因为它只收,所以号子是什么无所谓。我这里改了一下
public FormB
{
InitializeComponent();
this.Text = "接收端"; //与发送端中的FindWindow中的内容对应
}
protected override void WndProc(ref Message m) //重新函数,处理接收的信息
{
switch (m.Msg)
{
case 0x87D0: //就是上述发送端的号子
string message = m.WParam.ToString();
textBox1.AppendText("接受到信息:" + message + "\r\n"); // + "\r\n"以实现换行
break;
default: break; //实际上延展一下也可以同时接收多个 APP传输而来的消息
}
base.WndProc(ref m);
}
}
接收端的效果: