建立两个项目分别为APP1和APP2,在APP1中新建窗体为form1,重命名为测试窗口,在form1中拖入一个文本框,将其test属性更改为获取数据,再拖入一个button,增加点击事件内容为:
messagebox.show("从APP2点击")
,将其text属性更改为点击;在APP2中新建窗体form2,拖入两个button,
两个事件内容分别为
private void button1_Click(object sender, EventArgs e)
{
IntPtr hwnd_win;
IntPtr hwnd_button;
hwnd_win = FindWindow(null, "测试窗口");
hwnd_button = FindWindowEx(hwnd_win, new IntPtr(0), null, "点击");
// MessageBox.Show(hwnd_win.ToString());
const int BM_CLICK = 0x00f5;
Message msg = Message.Create(hwnd_button, BM_CLICK, new IntPtr(0), new IntPtr(0));
PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam);
}
private void button2_Click(object sender, EventArgs e)
{
const int WM_CHAR = 0x0102;
IntPtr hwnd_win;
IntPtr hwnd_textbox;
hwnd_win = FindWindow(null, "测试窗口");
hwnd_textbox = FindWindowEx(hwnd_win, new IntPtr(0), null, "获取数据");
string strtext = "从App2发送的测试数据";
UnicodeEncoding encode = new UnicodeEncoding();
char[] chars = encode.GetChars(encode.GetBytes(strtext));
Message msg;
foreach (char c in chars)
{
msg = Message.Create(hwnd_textbox, WM_CHAR, new IntPtr(c), new IntPtr(0));
PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam);
}
}
在其窗体声明方法
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string IpClassName, string IpWindowName);
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChidAfter, string IpszClass, string IpszWindow);
[DllImport("user32.dll",CharSet = CharSet.Unicode)]
public static extern IntPtr PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr IParam);