C# 使用FindWindow和FindWindowEx查找窗体和控件

C# 使用FindWindow和FindWindowEx查找窗体和控件方法一:函数://FindWindow//查找窗体//@para1:窗体的类名例如对话框类是"#32770"//@para2:窗体的标题例如打开记事本标题是"无标题-记事本"注意-号两侧的空格//return:窗体

大家好,欢迎来到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();

  

C# 使用FindWindow和FindWindowEx查找窗体和控件

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32104.html

(0)
上一篇 2023-11-15 22:45
下一篇 2023-11-19 17:15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信