FindWindowEx用法

FindWindowEx用法函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。    函数原型:HWNDFindWindowEx(HWNDhwndParent,HWNDhwndChildAfter,LPCTSTRlpszClass,LPCTSTRlpszWindow);    

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

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


    函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);

    参数:

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

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

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

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

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

    lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。

C#中使用该函数首先导入命名空间:

[c-sharp] 
view plain  
copy

  1. using System.Runtime.InteropServices;  

 

然后写API引用部分的代码,放入 class 内部

 

[c-sharp] 
view plain  
copy

  1. [DllImport(“user32.dll”, EntryPoint = “FindWindow”)]  
  2. private static extern IntPtr FindWindowEx( IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow )  

例如:

[c-sharp] 
view plain  
copy

  1. const int BM_CLICK = 0xF5;  
  2. IntPtr maindHwnd = FindWindow(null“QQ用户登录”); //获得QQ登陆框的句柄  
  3. if (maindHwnd != IntPtr.Zero)  
  4. {  
  5.     IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null“登录”);   //获得按钮的句柄  
  6.     if (childHwnd != IntPtr.Zero)  
  7.     {  
  8.         SendMessage(childHwnd, BM_CLICK, 0, 0);     //发送点击按钮的消息  
  9.     }  
  10.     else  
  11.     {  
  12.         MessageBox.Show(“没有找到子窗口”);  
  13.     }  
  14. }  
  15. else  
  16. {  
  17.     MessageBox.Show(“没有找到窗口”);  
  18. }  

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

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

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


相关推荐

  • 直播技术——视频编解码(理论基础)

    直播技术——视频编解码(理论基础)摘自:https://www.cnblogs.com/xkfz007/archive/2012/08/12/2613690.html第1章介绍1.为什么要进行视频压缩?未经压缩的数字视频的数据量巨大存储困难一张DVD只能存储几秒钟的未压缩数字视频。传输困难1兆的带宽传输一秒的数字电视视频需要大约4分钟。2. 为什么可以压

    2022年7月21日
    16
  • web.xml中contextConfigLocation的作用

    web.xml中contextConfigLocation的作用在web.xml中通过contextConfigLocation配置spring,contextConfigLocation参数定义了要装入的Spring配置文件。1.在web.xml里配置需

    2022年6月30日
    25
  • 数据系统架构——Lambda architecture(Lambda架构)

    数据系统架构——Lambda architecture(Lambda架构)传统系统的问题“我们正在从IT时代走向DT时代(数据时代)。IT和DT之间,不仅仅是技术的变革,更是思想意识的变革,IT主要是为自我服务,用来更好地自我控制和管理,DT则是激活生产力,让别人活得比你好”——阿里巴巴董事局主席马云。数据量从M的级别到G的级别到现在T的级、P的级别。数据量的变化数据管理系统(DBMS)和数仓系统(DW)也在悄然的变化着。

    2022年6月25日
    27
  • vue中怎么解决跨域问题_vue本地访问服务器跨域

    vue中怎么解决跨域问题_vue本地访问服务器跨域vue项目中如何解决跨域问题跨域的含义​ 跨域的本质就是浏览器基于同源策略的一种安全手段。所谓同源就是必须有以下三个相同点:协议相同、主机相同、端口相同。如果其中有一项不同,即出现非同源请求,就会产生跨域。​ 跨域实际上是浏览器的限制,开发中使用postman请求接口能够获得数据就印证了跨域是浏览器的限制这个问题。解决方法​ 一般前端中解决跨域问题的方法有JSONP,CROS,Proxy等,这里我们主要讲解一下在vue中常用的CROS和Proxy方法。CROS​ CROS是Cros

    2025年11月21日
    2
  • k8s(六)k8s生命周期和调度[通俗易懂]

    k8s(六)k8s生命周期和调度[通俗易懂]k8s概述创建和终止初始化容器钩子函数容器探测重启策略概述• 我们一般将Pod对象从创建到终止的这段时间范围称为Pod的生命周期,它主要包含下面的过程:Pod创建过程。运行初始化容器(init container)过程。运行主容器(main container):容器启动后钩子(post start)、容器终止前钩子(pre stop)。容器的存活性探测(liveness probe)、就绪性探测(readiness probe)。Pod终止过程。在整个生命周期中,Pod会出

    2022年8月9日
    7
  • ilruntime介绍

    ilruntime介绍1 原理篇 ILRuntime 借助 Mono Cecil 库来读取 DLL 的 PE 信息 以及当中类型的所有信息 最终得到方法的 IL 汇编码 然后通过内置的 IL 解译执行虚拟机来执行 DLL 中的代码 2 常见问题 1 跨域继承问题 可用跨越继承来热更主域代码跨域继承时需生产对应的 adapter 且 adapter 代码可能会有问题 需手动修复

    2025年10月15日
    3

发表回复

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

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