WPF获取窗口句柄,并向窗口内控件无差别发送文本内容
using System.Windows.Interop;
using System.Runtime.InteropServices; //DllImport
/*通过这个方法,可以找到主进程的窗体*/
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); //获取窗口句柄
[DllImport("USER32.DLL", EntryPoint = "FindWindowEx", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, int hwndChildAfter, string lpszClass, string lpszWindow); //获取主窗口的子窗口句柄
[DllImport("user32.dll")]
public static extern int SetWindowText(int handle, string title); //设置窗口标题
[DllImport("user32.dll", EntryPoint = "GetWindowText")]
public static extern int GetWindowText(IntPtr hwnd, StringBuilder lpString, int cch); //获取窗口标题
[DllImport("USER32.DLL")]
public static extern IntPtr GetWindow(IntPtr hWnd, int wCmd); //获取窗口
/*发送消息的结构体*/
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(
IntPtr hWnd,
int Msg,
int wParam,
//ref COPYDATASTRUCT lParam //通过结构发送,需要接收窗口接收程序
string lParam //通过字符串发送窗口自动接收
);
public enum WindowSearch
{
GW_HWNDFIRST = 0, //同级别第一个
GW_HWNDLAST = 1, //同级别最后一个
GW_HWNDNEXT = 2, //同级别下一个
GW_HWNDPREV = 3, //同级别上一个
GW_OWNER = 4, //属主窗口
GW_CHILD = 5 //子窗口}获取与指定窗口具有指定关系的窗口的句柄
}
/// <summary>
/// 获取窗口句柄,发送信息
/// </summary>
private void Sent_Msg()
{
/*C#进程通信(Server): 主进程的tilte*/
IntPtr WINDOW_HANDLER = FindWindow(null, “test.txt - 记事本”);//参数:窗口的类,窗口的标题:微信
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;
Result.Text = string.Format("{0}句柄:{1}", KeyWord.Text, Convert.ToString((int)WINDOW_HANDLER, 16));
//修改窗口标题
//SetWindowText((int)WINDOW_HANDLER, "C#");
//StringBuilder s = new StringBuilder(512);
//获取控件标题
//int i = GetWindowText(WINDOW_HANDLER, s, s.Capacity);
//Result.Text += "\n"+string.Format("句柄{0}的caption:{1}", Convert.ToString((int)WINDOW_HANDLER, 16), s.ToString());
IntPtr loginIntPtr = FindWindowEx(WINDOW_HANDLER, 0, null, null); //获取子窗口
while (loginIntPtr != IntPtr.Zero){
StringBuilder s = new StringBuilder(512);
int i = GetWindowText(loginIntPtr, s, s.Capacity);
Result.Text += "\n" + string.Format("句柄{0}的caption:{1}", Convert.ToString((int)loginIntPtr, 16), s.ToString());
//更改文本内容
SendMessage(loginIntPtr, 0x0C, 0, SentWord.Text); //发送编辑文本信息命令
loginIntPtr = GetWindow(loginIntPtr, (int)WindowSearch.GW_HWNDNEXT); //循环获取同等级下一个窗口
}
}
}

浙公网安备 33010602011771号