WPF获取窗口句柄,并向窗口结构性发送文本内容
发送端:
using System.Runtime.InteropServices; //DllImport
/*发送消息的结构体*/
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(
IntPtr hWnd,
int Msg,
int wParam,
ref COPYDATASTRUCT lParam //通过结构发送,需要接收窗口接收程序
//string lParam //通过字符串发送窗口自动接收
);
/// <summary>
/// 获取窗口句柄,发送信息
/// </summary>
private void Sent_Msg()
{
/*C#进程通信(Server): 主进程的tilte*/
IntPtr WINDOW_HANDLER = FindWindow(null, KeyWord.Text);//参数:窗口的类,窗口的标题:微信
if (WINDOW_HANDLER == IntPtr.Zero)
{
Result.Text = string.Format("找不到{0}的句柄:", KeyWord.Text);
}
else
{
int age = 12;
byte[] sarr = System.Text.Encoding.Default.GetBytes(SentWord.Text);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)age;
cds.lpData = SentWord.Text;
cds.cbData = len + 1;
SendMessage(WINDOW_HANDLER, 74, 0, ref cds); //通过结构发送
}
}
接收端:
using System.Runtime.InteropServices;
const int WM_COPYDATA = 0x004A;
public struct COPYDATASTRUCT
{
public int PtrdwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
//接收进程间传递的消息
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_COPYDATA://消息接收处理
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
ResponseWord.Text = mystr.lpData;
break;
default:
base.DefWndProc(ref m);
break;
}
}