WindowsAPI-获得当前活动窗口(运行自身消息循环的窗体)的句柄

2023-05-16

/************************

GetForegroundWindow() 返回 Windows 系统的当前激活的窗口句柄。
GetActiveWindow() 返回自己程序的当前激活窗口的句柄。
Screen->ActiveForm 返回自己程序的激活的TForm派生的窗口。
Screen->ActiveForm->Handle 不一定等于 GetActiveWindow()。比如,当调用TOpenDialog
TSaveDialog TFontDialog TColorDialog 的 Execute() 函数时,GetActiveWindow() 返回
的时一个Windows系统对话框的句柄,他不是VCL的TForm,此时就不等于Screen->ActiveForm
->Handle,还有调用 MessageBox 时也是这样子。

//*******************************************

函数功能:该函数可以获得与调用线程的消息队列相关的活动窗口的窗口句柄。

函数原型:HWND GetActiveWindow(VOID)

参数:无。

返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。

//*************WindowsAPI介绍

AfxGetMainWnd
AfxGetMainWnd获取自身窗口句柄
HWND hWnd = AfxGetMainWnd()->m_hWnd;

GetTopWindow
函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。
函数原型:HWND GetTopWindow(HWND hWnd);
参数:
  hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。
返回值:
    如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。

GetForegroundWindow
函数功能:该函数返回当前系统的前台窗口的窗口句柄。
函数原型:HWND GetForegroundWindow(VOID)  
返回值:函数返回前台窗回的句柄。

GetActiveWindow

函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。
函数原型:HWND GetActiveWindow(VOID)
返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。

GetSafeHwnd
函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。
通过下面的例子来看其理由:
  CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
  HWND hwnd = pwnd->m_hwnd; //得到它的HWND
  这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:
  CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
  HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND
  就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL

IsWindowVisible
函数功能:该函数获得给定窗口的可视状态。
函数原型:BOOL IsWindowVisible(HWND hWnd);
参数;
  hWnd:被测试窗口的句柄。
返回值:
    如果指定的窗口及其父窗口具有WS_VISIBLE风格,返回值为非零;如果指定的窗口及其父窗口不具有WS_VISIBLE风格,返回值为零。由于返回值表明了窗口是否具有Ws_VISIBLE风格,因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。
备注:
    窗口的可视状态由WS_VISIBLE位指示。当设置了WS_VISIBLE位,窗口就可显示,而且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。

IsWindow: 函数功能:该函数确定给定的窗口句柄是否标示一个已存在的窗口。 
函数原型:BOOL IsWindow(HWND hWnd);
参数:
    hWnd:被测试窗口的句柄。
返回值:
    如果窗口句柄标识了一个已存在的窗口,返回值为TURE;如果窗口句柄未标识一个已存在窗口,返回值为FALSE。

FindWindow:
HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName );
参数:
lpClassName
  指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
lpWindowName
  指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
返回值:
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
  如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。

SetWindowText:
至于窗口标题的改变,我们可以通过SetWindowText来实现
注:如果窗口本身属性是不显示标题的,这个函数的调用不会影响窗口属性。
//Set title for application’s main frame window .
AfxGetMainWnd ( ) -> SetWindowText (_T("Application title") )
//Set title for View’s MDI child frame window .
GetParentFrame ( ) -> SetWindowText ("_T ("MDI Child Frame new title") )
//Set title for dialog’s push button control.
GetDigitem (IDC_BUTTON) -> SetWindowText (_T ("Button new title ") )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WindowsAPI-获得当前活动窗口(运行自身消息循环的窗体)的句柄 的相关文章

  • QT c++ 中使用PostMessage/SendMessage实例

    PostMessage是Windows API 应用程序接口 中的一个常用函数 xff0c 用于将一条消息放入到消息队列中 并且不会等待响应的线程处理消息 xff0c 而是直接返回 xff08 简单的理解就是异步 xff09 而SendMe
  • Qt-线程启动与关闭实例

    养成资源回收的好习惯 xff0c 任何时候都要想起开辟过的内存回收 就是利用关闭窗口时调用槽函数回收掉 具体步骤不难 xff0c 如下 xff1a 1 xff09 退出线程 xff1b 2 xff09 回收子线程 xff1b 3 xff09
  • qt中QListView的用法和QModelIndex的使用

    使用QTreeView xff0c 对于很多函数中针对item的唯一标识QModelIndex的使用 xff0c 记录下两种对于QModelIdex的使用 1 xff0c 树形结构的item设置为选中 QModelIndex rootInd
  • Qt-QMessageBox用法详解

    QMessageBox 是 Qt 框架中常用的一个类 xff0c 可以生成各式各样 各种用途的消息对话框 xff0c 如图 1 所示 图 1 QMessageBox消息对话框 很多 GUI 程序都会用到消息对话框 xff0c 且很多场景中使
  • Qt-手动布局

    简述 手动布局 xff0c 可以实现和水平布局 垂直布局 网格布局等相同的效果 xff0c 也可实现属于自己的自定义布局 xff0c 当窗体缩放时 xff0c 控件可以随之变化 其对于坐标系的建立有严格要求 xff0c 纯代码思维 xff0
  • Qt-5种布局控件详解

    实际开发中 xff0c 一个界面上可能包含十几个控件 xff0c 手动调整它们的位置既费时又费力 作为一款成熟的 GUI 框架 xff0c Qt 提供了很多摆放控件的辅助工具 xff08 又称布局管理器或者布局控件 xff09 xff0c
  • vnc怎么设置自适应屏幕,2种方法教你vnc怎么设置自适应屏幕

    VNC 是在基于 UNIX和 LINUX 操作系统的免费的开源软件 xff0c 远程控制能力强大 xff0c 高效实用 xff0c 其性能可以和 WIndows和 MAC 中的任何远程控制软件媲美 在使用vnc软件的过程中 xff0c 往往
  • C++中的野指针问题

    文章目录 1 C和C 43 43 中的野指针问题 1 1 野指针的概念 1 2 野指针的由来 1 3 杜绝野指针的基本原则 2 C和C 43 43 中的常见内存错误 2 1 常见内存错误 2 2 内存操作的基本规则 1 C和C 43 43
  • Qt-调用dll动态链接库

    事先写一个简单的dll文件 myDLL dll C版接口的 并且用我前两篇有关DLL文章里面的方法 xff0c 从dll中导出了导入库 lib 文件 xff0c dll中有两个函数 xff0c 原型如下 xff1a void HelloWo
  • Qt调用动态链接库ControlCAN.dll实例

    注意 xff1a controlCan引用静态库时需要将kerneldlls文件夹放置程序的输出路径下设备才能链接成功 首先添加外部库文件 xff08 lib文件 xff09 一 添加第三方的头文件 这个问题再简单不过了 xff0c 不过我
  • asposeword.dll通过word模板生成word、PDF

    效果图 1 word模板 xff08 部分 xff09 书签 2 生成结果图 开始上代码 Dictionary lt string string gt dictSource 61 new Dictionary lt string strin
  • Qt-捕获Windows消息

    Qt4版本的实现 方法1 xff1a 通过继承QWidget的类中重新实现winEvent接口 xff0c 以接收在消息参数中传递的本机Windows事件 bool QWidget winEvent MSG message long res
  • c语言-指针

    目录 1 指针是什么 xff1f 2 指针和指针类型 2 1 指针 43 整数 2 2 指针的解引用 3 野指针 3 1 野指针成因 3 2 如何规避野指针 4 指针运算 4 1 指针 43 整数 4 2 指针 指针 4 3 指针的关系运算

随机推荐

  • 汇编-函数调用的理解

    1 从代码的顺序执行说起 每一个程序员脑子里应该都有这么一种印象 xff1a 程序是顺序执行的 这个观点其实和我们开篇所讲的cpu的流水线执行过程直接相关 让我们再回忆一下脑海中关于函数调用的概念 xff0c 也许会是这个样子 xff1a
  • qt-制作生成dll动态链接库实例

    debug模式下体积过大的话 xff0c 选择release编译会缩小很大一部分体积 选择创建qt库项目 xff0c 根据提示选择相应配置 xff1a Type xff1a Shared Libray xff1b Statically li
  • qt-信号和槽的连接写法

    Qt4 旧语法 xff1a connect sender SIGNAL valueChanged QString QString receiver SLOT updateValue QString Qt新语法 xff1a QLabel la
  • C#实现查找指定端口被哪个进程占用并处理进程及dos命令下操作

    1 检查当前系统中8000端口是否正在被其它进程使用 xff1b 2 如果8000端口正在被使用 xff0c 就找出该进程 xff0c 并强行结束 3 使用C 变成语言实现 检查8000端口在被哪一个进程所使用 简单的解决方案如下 xff1
  • vncserver命令,vncserver命令有哪些

    vncserver是一个用来共享linux服务器上资源给其他分布式用户的服务 vncserver命令能实现的功能很多 xff0c 那具体有哪些vncserver命令呢 xff1f 跟着小编一起去看看吧 如图 xff1a xff08 官网地址
  • QT-QPainter绘制曲线等基本图形

    Qt中绘制2D图形最核心的一个类是QPainter 类QPainter是在设备类QPaintDevice上绘制几何图形 xff08 包括直线 曲线 圆形 弧形 矩形等等 xff09 xff0c 其中设备类QPaintDevice的子类又有Q
  • qt-项目部署(某些情况下编译器中运行异常的话可以使用命令windeployqt 程序名在安装的qt dos命令下补全部分依赖库在运行项目或发布)

    一般qt项目启动不起来大部分都是因为依赖库要么缺失要么位数不对 有时候缺失的dll不会提示出来 xff0c 建议检查设置计算机环境变量 xff0c 项目编译设置路径等 xff0c 然后再使用dos命令windeployqt添加qt依赖库 Q
  • Creator-配置MSVC调试器

    安装完QT后会看到Qt Creator中的MSVC构建组件带有黄色的感叹号 xff0c 那是因为没有调试器的原因 由于Qt MSVC版本套件没有默认安装调试器 需要我们自己手动下载安装 根据官方文档Setting Up Debugger Q
  • MFC和QT等UI框架的特点

    UI设计的3大原则 xff1a 面向对象 xff1b MVC xff1b 消息队列驱动 xff1b 直到现在各个UI系统 xff0c 包括题主所提到的MFC WPF Qt xff0c 也包括其它 xff0c 诸如Android SDK Co
  • MFC中创建线程实例

    static UINT ThreadFunc LPVOID pParam 线程函数声明UINT CTestApp ThreadFunc LPVOID pParam 可以传递对话框的等指针变量 利用pParam指针参数来操作各种ui对象和类型
  • QT和MFC中怎么使用继承基类的自定义控件放置在界面上

    1 Qt中 自定义button继承于QPushButton xff0c f2查看指定控件的声明定义 xff0c 可以手动改ui form h文件里各个类型的控件指针变量 xff0c 改成自己定义的 34 xff08 这里ui form h在
  • MFC-Tab Control控件使用

    在MFC当中使用Tab Control控件切换不同的界面 xff0c 使用起来会复杂一些 xff0c 至少是比Qt中的Tab Widget复杂得多 我接下来会以一个MFC对话框应用程序为例子 xff0c 说明Tab Control控件的简单
  • MFC中访问界面控件的两种方法

    1 在资源中创建一个对话框资源 xff0c 放置一些控件 xff0c 然后使用类向导创建一个此对话框类型的变量 xff0c 项目中会自动创建此对话框的 h和 cpp文件 有两种方式可在代码中访问控件 1 如果在代码中直接访问 则使用this
  • MFC-使用自定义控件的方法

    1 在资源编辑中设计好界面 2 右键界面在类向导里创建类型后自动生成界面的 h和 cpp文件 3 在使用该界面类型的类中创建该成员变量 4 Create创建注册窗体UI CRect crect GetClientRect amp crect
  • MFC中添加的ID资源号提示找不到声名问题

    1 查看resource h资源文件 xff0c 基本上都是因为某些界面上的修改等原因造成了里面部分定义ID号值重复了才报的错 xff0c 所以要在resource h文件中手动修改成不一样的id值
  • vnc远程桌面,vnc远程桌面使用教程图解

    作为一个新手小白 xff0c 你是否也像小编一样不知道如何实现vnc远程桌面呢 xff1f vnc作为一款出色的远程软件 xff0c 在远程桌面方面也同样出色 xff0c 那如何实现vnc远程桌面使用 xff1f 小编发现了一款超好用的vn
  • MFC-创建模态对话框和非模态对话框的方法

    注意 xff1a 以下实例中创建模态对话框时没有用create xff08 id号 xff09 绑定资源id xff0c 而非模态对话框中要用create xff08 id号 xff09 绑定对话框资源id 在MFC中对话框有两种形式 xf
  • MFC-动态创建控件并使用的方法

    CListBox newLisBox 61 new CListBox newLisBox gt SetParent amp m tab CRect rc m tab GetClientRect rc rc top 43 61 20 43 G
  • c#实例-子线程查找另一线程模态对话框句柄(invoke测试)

    private void button3 Click object sender EventArgs e Task Factory StartNew 61 gt Form1 form1 61 new Form1 form1 Name 61
  • WindowsAPI-获得当前活动窗口(运行自身消息循环的窗体)的句柄

    GetForegroundWindow 返回 Windows 系统的当前激活的窗口句柄 GetActiveWindow 返回自己程序的当前激活窗口的句柄 Screen gt ActiveForm 返回自己程序的激活的TForm派生的窗口 S