大家好,欢迎来到IT知识分享网。
方法一:
函数:
// Find Window
// 查找窗体
// @para1: 窗体的类名 例如对话框类是”#32770″
// @para2: 窗体的标题 例如打开记事本 标题是”无标题 – 记事本” 注意 – 号两侧的空格
// return: 窗体的句柄
[DllImport(“User32.dll”, EntryPoint = “FindWindow”)]
public static extern IntPtr FindWindow(string className, string windowName);
/// Find Window Ex
/// 查找窗体的子窗体
/// @para1: 父窗体的句柄 如果为null,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口
/// @para2: 子窗体的句柄 如果为null,从@para1的直接子窗口的第一个开始查找
/// @para3: 子窗体的类名 为””表示所有类
/// @para4: 子窗体的标题 为””表示要查找的窗体无标题 如空白的textBox控件
/// return: 子窗体的句柄
[DllImport(“user32.dll”, EntryPoint = “FindWindowEx”)]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
/// <summary>
/// 消息发送API
/// </summary>
/// <param name=”hWnd”>信息发往的窗口的句柄</param>
/// <param name=”Msg”>消息ID</param>
/// <param name=”wParam”>参数1</param>
/// <param name=”lParam”>参数2</param>
/// <returns></returns>
[DllImport(“User32.dll”, EntryPoint = “SendMessage”)]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
如图想查询到此窗体并点击确定按钮代码如下:
// 执行操作 const int BM_CLICK = 0xF5; string windowName = "错误"; IntPtr maindHwnd = FindWindow(null, windowName); //获得选择框的句柄 if (maindHwnd != IntPtr.Zero) { IntPtr childHwndbtn = FindWindowEx(maindHwnd, IntPtr.Zero, null, "确定"); //获得按钮的句柄 if (childHwndbtn != IntPtr.Zero) { SendMessage(childHwndbtn, BM_CLICK, 0, 0); //发送点击按钮的消息 } else { MessageBox.Show("没有找到子窗口-按钮"); } } else { MessageBox.Show("没有找到窗口"); }
方法二(此方法为查找子窗体,并窗体置顶显示):
// Find Window // 查找窗体 // @para1: 窗体的类名 例如对话框类是"#32770" // @para2: 窗体的标题 例如打开记事本 标题是"无标题 - 记事本" 注意 - 号两侧的空格 // return: 窗体的句柄 [DllImport("User32.dll", EntryPoint = "FindWindow")] public static extern IntPtr FindWindow(string className, string windowName); [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags); 然后在formLoad中添加下面代码(此代码为查找错误窗体): Task t1 = new Task(() => { while (true) { IntPtr intPtr = FindWindow(null, "错误"); LogHelper.WriteLog(GetType(), "获取错误窗体"); if ((int)intPtr > 0) { LogHelper.WriteLog(GetType(), "获取错误窗体置顶"); SetWindowPos(intPtr, -1, 0, 0, 0, 0, 1 | 2); //置顶 } Thread.Sleep(500); } }); t1.Start();
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32104.html