C#根据弹窗标题获取窗体句柄并模拟点击按钮(FindWindow,FindWindowEx,SendMessage)

摘要:
=IntPtr。零){IntPtrChildHwnd=FindWindowEx;//如果(childHwnd!

任务:将下面弹窗自动关闭

C#根据弹窗标题获取窗体句柄并模拟点击按钮(FindWindow,FindWindowEx,SendMessage)第1张

        /// <summary>
        /// 找到窗口
        /// </summary>
        /// <param name="lpClassName">窗口类名(例:Button)</param>
        /// <param name="lpWindowName">窗口标题</param>
        /// <returns></returns>
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

        /// <summary>
        /// 找到窗口
        /// </summary>
        /// <param name="hwndParent">父窗口句柄(如果为空,则为桌面窗口)</param>
        /// <param name="hwndChildAfter">子窗口句柄(从该子窗口之后查找)</param>
        /// <param name="lpszClass">窗口类名(例:Button</param>
        /// <param name="lpszWindow">窗口标题</param>
        /// <returns></returns>
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        private extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="hwnd">消息接受窗口句柄</param>
        /// <param name="wMsg">消息</param>
        /// <param name="wParam">指定附加的消息特定信息</param>
        /// <param name="lParam">指定附加的消息特定信息</param>
        /// <returns></returns>
        [DllImport("user32.dll", EntryPoint = "SendMessageA")]
        private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);

        //窗口发送给按钮控件的消息,让按钮执行点击操作,可以模拟按钮点击
        private const int BM_CLICK = 0xF5;

 通过窗体标题,循环查找该窗体,然后找到确定按钮,通过句柄发送点击消息,主动关闭弹窗

 private void Form1_Load(object sender, EventArgs e)
        {
            Task task = new Task(() =>
            {
                while (true)
                {
                    //测试警告框
                    IntPtr maindHwnd = FindWindow(null, "提示");//主窗口标题
                    if (maindHwnd != IntPtr.Zero)
                    {
                        IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null, "确定");//按钮控件标题
                        if (childHwnd != IntPtr.Zero)
                        {
                            SendMessage(childHwnd, BM_CLICK, 0, 0);
                        }
                    }
                }
            });

            task.Start();
        }

  

参考:

https://www.cnblogs.com/easypass/p/4067484.html

https://www.cnblogs.com/tary2017/articles/8031782.html

免责声明:文章转载自《C#根据弹窗标题获取窗体句柄并模拟点击按钮(FindWindow,FindWindowEx,SendMessage)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇支付宝接口ftpclient 遇到的一些问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FindWindowEx使用方法

 函数功能:该函数获得一个窗体的句柄,该窗体的类名和窗体名与给定的字符串相匹配。这个函数查找子窗体,从排在给定的子窗体后面的下一个子窗体開始。在查找时不区分大写和小写。    函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszW...

FindWindow使用方法

函数功能:该函数获得一个顶层窗体的句柄,该窗体的类名和窗体名与给定的字符串相匹配。这个函数不查找子窗体。在查找时不区分大写和小写。函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);參数:IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。假...

c# 定时关闭 MessageBox 或弹出的模态窗口

我们都知道,MessageBox弹出的窗口是模式窗口,模式窗口会自动阻塞父线程的。所以如果有以下代码: MessageBox.Show("内容',"标题"); 则只有关闭了MessageBox的窗口后才会运行下面的代码。而在某些场合下,我们又需要在一定时间内如果在用户还没有关闭窗口时能自动关闭掉窗口而避免程序一直停留不前。这样的话我们怎么做呢?上面也说...

c#根据标题判断进程是否存在,是否已退出

 int handle = FindWindow(null, "XXX");  if (handle == 0)//0说明不存在 [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern int FindWindow(string lpClassName, stri...

c#自动关闭 MessageBox 弹出的窗口

我们都知道,MessageBox弹出的窗口是模式窗口,模式窗口会自动阻塞父线程的。所以如果有以下代码: MessageBox.Show("内容',"标题"); 则只有关闭了MessageBox的窗口后才会运行下面的代码。而在某些场合下,我们又需要在一定时间内如果在用户还没有关闭窗口时能自动关闭掉窗口而避免程序一直停留不前。这样的话我们怎么做呢?上面也说了...