C#FindWindowEx参数详解「建议收藏」

C#FindWindowEx参数详解「建议收藏」FindWindowEx参数详解本函数的其他内容在网络上都比较多,这里主要说一下它的参数设置和搜索结果的区别。函数功能:在窗口列表中寻找与指定条件相符的第一个子窗口。该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。函数原型:HWNDFindWindowEx(HWNDh

大家好,又见面了,我是你们的朋友全栈君。

FindWindowEx参数详解

本函数的其他内容在网络上都比较多,这里主要说一下它的参数设置和搜索结果的区别。

函数功能:在窗口列表中寻找与指定条件相符的第一个子窗口。该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。

函数原型:

HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);

参数:

hwndParent:要查找子窗口的父窗口句柄。

如果hwndParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。

Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。

hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL(C#中为newIntPtr(0)),查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。

lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。

lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL(注意:””和null是有区别的),则为所有窗口全匹配。

返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。

    [DllImport(“User32.dll”, EntryPoint = “FindWindowEx”)]
        public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);

例子:

//******************这部分内容是为了说明函数FindWindowEx的用法的额外的实验部分******************//

                IntPtr ExitWnd = new IntPtr(0);   //临时储存操作窗体的句柄

                StringBuilder stbf_WndStr = new StringBuilder();//定义存储String的Butter

                stbf_WndStr.Capacity = 60;

 

                //1) 该例子一直无法找到Exit按键,因为Name不为null,而是等于””,null和””是有区别的

                tbDisplay.Text = tbDisplay.Text +“\r\n\r\n1)此处寻找不到Exit的按键,因为Name不为null,而是等于\”\””;

                ExitWnd = FindWindowEx(ParenthWnd,newIntPtr(0), lpszClass_Submit,“”);

                if (!ExitWnd.Equals(IntPtr.Zero))

                {

                    GetWindowText(ExitWnd, stbf_WndStr, stbf_WndStr.Capacity – 1);

                    tbDisplay.Text = tbDisplay.Text +“\r\n实验内容: ExitWnd.text = “ + stbf_WndStr.ToString();

                }

                else

                {

                    tbDisplay.Text = tbDisplay.Text +“\r\nErr: ExitWnd = null!!!”;

                }

 

                //2) 寻找到Exit的按键,因为Name包含正确的名字”Exit”

                tbDisplay.Text = tbDisplay.Text +“\r\n\r\n2)寻找到Exit的按键,因为Name包含正确的名字\”Exit\””;

                ExitWnd = FindWindowEx(ParenthWnd,newIntPtr(0), lpszClass_Submit,“Exit”);

                if (!ExitWnd.Equals(IntPtr.Zero))

                {

                    GetWindowText(ExitWnd, stbf_WndStr, stbf_WndStr.Capacity – 1);

                    tbDisplay.Text = tbDisplay.Text +“\r\n实验内容: ExitWnd.text = “ + stbf_WndStr.ToString();

                }

                else

                {

                    tbDisplay.Text = tbDisplay.Text +“\r\nErr: ExitWnd = null!!!”;

                }

 

                //3) 此处寻找不到Login的按键,因为Name不为null,而是等于””,null和””是有区别的

                tbDisplay.Text = tbDisplay.Text +“\r\n\r\n3)此处寻找不到Login的按键,因为Name不为null,而是等于\”\””;

                LogBtWnd = FindWindowEx(ParenthWnd, ExitWnd, lpszClass_Submit,“”);

                if (!LogBtWnd.Equals(IntPtr.Zero))

                {

                    GetWindowText(LogBtWnd, stbf_WndStr, stbf_WndStr.Capacity – 1);

                    tbDisplay.Text = tbDisplay.Text +“\r\n已搜索到登录按键: “ + stbf_WndStr.ToString();

                }

                else

                {

                    tbDisplay.Text = tbDisplay.Text +“\r\n无法找到登录按键的子窗口!!!”;

                }

 

                //4) 此处寻找不到Login的按键,因为FindWindowEx第二个参数为空,且Name = null,从第一个子窗口开始查找,

                //根据Tab Index的顺序找到的第一个属于按键类的该是Reset按键.

                tbDisplay.Text = tbDisplay.Text

                       + “\r\n\r\n4) 此处寻找不到Login的按键,因为FindWindowEx第二个参数为空,且Name = null,从第一个子窗口开始查找,”

                       + “根据Tab Index的顺序找到的第一个属于按键类的该是Reset按键.”;

                LogBtWnd = FindWindowEx(ParenthWnd,newIntPtr(0), lpszClass_Submit,null);

                if (!LogBtWnd.Equals(IntPtr.Zero))

                {

                    GetWindowText(LogBtWnd, stbf_WndStr, stbf_WndStr.Capacity – 1);

                    tbDisplay.Text = tbDisplay.Text +“\r\n已搜索到登录按键: “ + stbf_WndStr.ToString();

                }

                else

                {

                    tbDisplay.Text = tbDisplay.Text +“\r\n无法找到登录按键的子窗口!!!”;

                }

 

                //5) 成功寻找到Login的按键,此处第个参数放置ExitWnd或者new IntPtr(0)都可以,因为Exit和Login都属于相同的类,而且具有不同的Name.

                tbDisplay.Text = tbDisplay.Text

                       + “\r\n\r\n5) 成功寻找到Login的按键,此处第个参数放置ExitWnd或者new IntPtr(0)都可以,”

                       + “因为Exit和Login都属于相同的类,而且具有不同的Name.”;

                LogBtWnd = FindWindowEx(ParenthWnd, ExitWnd, lpszClass_Submit, lpszName_Submit);

                if (!LogBtWnd.Equals(IntPtr.Zero))

                {

                    GetWindowText(LogBtWnd, stbf_WndStr, stbf_WndStr.Capacity – 1);

                    tbDisplay.Text = tbDisplay.Text +“\r\n已搜索到登录按键: “ + stbf_WndStr.ToString();

                }

                else

                {

                    tbDisplay.Text = tbDisplay.Text +“\r\n无法找到登录按键的子窗口!!!”;                   

                }

 

                //6) 成功寻找到Login的按键,此处第个参数放置ExitWnd,即使Name=null也可以找到,因为ExitWnd的下一个就是Login按键.

                tbDisplay.Text = tbDisplay.Text

                       + “\r\n\r\n6) 成功寻找到Login的按键,此处第个参数放置ExitWnd,即使Name=null也可以找到,因为ExitWnd的下一个就是Login按键.”;

                LogBtWnd = FindWindowEx(ParenthWnd, ExitWnd, lpszClass_Submit,null);

                if (!LogBtWnd.Equals(IntPtr.Zero))

                {

                    GetWindowText(LogBtWnd, stbf_WndStr, stbf_WndStr.Capacity – 1);

                    tbDisplay.Text = tbDisplay.Text +“\r\n已搜索到登录按键: “ + stbf_WndStr.ToString();

                }

                else

                {

                    tbDisplay.Text = tbDisplay.Text +“\r\n无法找到登录按键的子窗口!!!”;

                }

                return;

 

 

完整的源代码请参考RemoteLogin的例子。

本段代码输出:

1) 此处寻找不到Exit的按键,因为Name不为null,而是等于””

Err: ExitWnd = null!!!

 

2) 寻找到Exit的按键,因为Name包含正确的名字”Exit”

实验内容: ExitWnd.text = Exit

 

3) 此处寻找不到Login的按键,因为Name不为null,而是等于””

无法找到登录按键的子窗口!!!

 

4) 此处寻找不到Login的按键,因为FindWindowEx第二个参数为空,且Name = null,从第一个子窗口开始查找,根据Tab Index的顺序找到的第一个属于按键类的该是Reset按键.

已搜索到登录按键: Reset

 

5) 成功寻找到Login的按键,此处第2个参数放置ExitWnd或者new IntPtr(0)都可以,因为Exit和Login都属于相同的类,而且具有不同的Name.

已搜索到登录按键: LogIn

 

6) 成功寻找到Login的按键,此处第2个参数放置ExitWnd,即使Name=null也可以找到,因为ExitWnd的下一个就是Login按键.

已搜索到登录按键: LogIn

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138013.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 计算机专业男人喜欢什么样的女人,说实在的,其实男人真正喜欢的女人,就三个特征…

    计算机专业男人喜欢什么样的女人,说实在的,其实男人真正喜欢的女人,就三个特征…男人和女人有什么不同?大概是后者的世界里只有爱情,前者的世界里除了爱情,还有对金钱与权力的渴望。人比人气死人。有些女人从来都不缺追求者,有些女人从来都没有追求者,很多时候并不明白,她到底比她差在哪里?这还不算扎心的,有些女人绞尽脑汁,都没能守住自己的爱情,而有些女人看着都没怎么费力,却保卫了自己的爱情。也许我们都要深思,那些一直“幸运”的女人到底有什么秘诀。对于感情,女人一般会有的疑问,无非两个。…

    2022年7月25日
  • jQuery Validate插入 reomte使用详细的说明

    jQuery Validate插入 reomte使用详细的说明

    2022年1月13日
  • java 雪崩效应,七、微服务架构中的“雪崩效应”

    java 雪崩效应,七、微服务架构中的“雪崩效应”1.雪崩效应在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。其实,在单体服务中,高并发也会导致服务瘫痪。见下一章,Jmeter模拟微服务当中的高并发场景在分布式系统中,由于网络原因或自身的原因,服…

    2022年7月13日
  • linux默认安装路径在哪里_linux进入根目录命令

    linux默认安装路径在哪里_linux进入根目录命令Nginx安装安装路径 /usr/local/nginx配置文件 /usr/local/nginx/conf/nginx.conf启动:进入到/usr/local/nginx/sbin下,./nginx关闭:进入到/usr/local/nginx/sbin下 ./nginx -s stop 重启:同上, -s reload停止 kill -9 线程号查看 ps -ef|grep nginxhttps://www.jianshu.com/p/9f2c162ac77c 可参考安装ng

    2022年8月19日
  • react路由懒加载_vue-router实现路由懒加载

    react路由懒加载_vue-router实现路由懒加载路由懒加载是什么意思?在开发中,我们打开开发者工具,会发现我们刚刚打开就会去加载所有页面.路由懒加载就是只加载你当前点击的那个模块按需去加载路由对应的资源,可以提高加载速度(一个页面加载过后再次访问不会重复加载)实现原理:将路由相关的组件,不再直接导入了,而是改写成异步组件的写法,只有当函数被调用的时候,才去加载对应的组件内容方法一:重写首先,新建一个asynccComponent.js,作为公共jsimport{ComponentasReactComponet}fr

    2022年10月7日
  • 【心算】2个两位数相乘。条件:十位相同,个位之和为10

    【心算】2个两位数相乘。条件:十位相同,个位之和为10346207-106.jpg两个两位数,满足以下2个条件:它们的十位数相同;它们的个位数之和为10。例如:76×74=5624在这个例子中,两个数的十位数都是7,而它们的个位数之和是6+4=10。我们可以采用【心算】个位是5的两位数的平方的方式。十位乘以(十位+1)的积,再拼接个位与个位相乘的积。76×74…

    2022年5月18日

发表回复

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

关注全栈程序员社区公众号