文档章节

GetWindowText 卡死

阳666
 阳666
发布于 2016/03/25 12:28
字数 339
阅读 60
收藏 0
点赞 1
评论 0

今天因为业务需要封装了一个函数:

int GenHwndByTitle(CString title,vector<HWND>& hwnds){

    int nCount = 0;

    // 获得首个handle.  

    HWND h = FindWindow(0,0);  

    // 循环查找直到找到为给定进程ID的窗口句柄  

    while( h != NULL)  

    {  

        //检查窗口句柄是否为顶级窗口  

        if( ::GetParent(h) == NULL )  

        {  

           tchar text[255];  

            ::GetWindowText(h,text,255);  

            CString str = CString(text);

            if ( str == title )

            {

                nCount++;

            }

            //有的有窗口 但无标题  

            /*if (strlen(text)>1)  

            {  

                printf("hwnd[%s]\n",text);  

            }  */

        }  

        // 取下一个窗口的句柄  

        //h = GetWindow(h, GW_HWNDNEXT);  

   h = GetWindow(h, GW_HWNDNEXT);          

}

    return nCount;

}

然后调试的时候发现死机了。(无响应,),后来查了下卡在了GetWindowText这里。

原因网上有很多:

    // 会卡机,有可能是获取自身窗体标题会卡住。。系统无线等待。。死锁了。

解决办法:

//https://msdn.microsoft.com/en-us/library/windows/desktop/ms633523(v=vs.85).aspx

使用新API:InternalGetWindowText替换GetWindowText


就像下面这样

//通过窗口获取句柄

int GenHwndByTitle(CString title,vector<HWND>& hwnds){

    int nCount = 0;

    // 获得首个handle.  

    HWND h = FindWindow(0,0);  

    // 循环查找直到找到为给定进程ID的窗口句柄  

    while( h != NULL)  

    {  

        //检查窗口句柄是否为顶级窗口  

        if( ::GetParent(h) == NULL )  

        {  

            TChar text[255];  

            ::GetWindowText(h,text,255);  

            CString str = CString(text);

            if ( str == title )

            {

                nCount++;

            }

            //有的有窗口 但无标题  

            /*if (strlen(text)>1)  

            {  

                printf("hwnd[%s]\n",text);  

            }  */

        }  

        // 取下一个窗口的句柄  

        //h = GetWindow(h, GW_HWNDNEXT);  

   h = InternalGetWindow(h, GW_HWNDNEXT);          

}

    return nCount;

}

问题解决

         


© 著作权归作者所有

共有 人打赏支持
阳666
粉丝 4
博文 71
码字总数 62734
作品 0
长宁
程序员
一款上网拨号程序的设计-----vc+篇

现在的时代是网络的时代,网络应用程序的应用越来越广泛,在自己设计的应用程序中实现直接拨号上网,给应用程序的使用者带了很多方便与惊喜。 环境:window7 操作系统 vc+6.0开发 首先创建一...

crossmix ⋅ 2015/12/18 ⋅ 0

python3如何获得前端显示窗口的句柄?

我只知道以下代码可以显示所有的可见窗口. 但是我想要前端显示的窗口,应该怎么做? from win32gui import * titles = set() def foo(hwnd,nouse): if IsWindow(hwnd) and IsWindowEnabled(hw...

FakeThinker ⋅ 2014/07/02 ⋅ 0

CEdit 密码输入框实现

1.密码输入 在::OnInitDialog()函数中添加代码如下 TCHAR ch = ''; ((CEdit )GetDlgItem(IDCEDITPASSWORD))->SetPasswordChar(ch); 添加一个按钮来点击显示输入的密码 按钮消息函数::OnBnCli...

mjrao ⋅ 2012/11/10 ⋅ 0

spring+maven+mybatis的单元测试卡死,求解!

前几天还好好的,由于去搞另外一个单点登录的框架,加了一些新功能,然后再回来做这个项目发现自己的单元测试跑不起来了,各种卡死,困扰我一天了0 0,求解啊啊啊啊! 这是src/test/resource...

Catelyn ⋅ 2013/11/05 ⋅ 3

Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)

Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转) 用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是回调函数。我的理解是这样的: 回调函数写出来不是自己的程序去调用的,...

vga ⋅ 2015/02/05 ⋅ 0

springmvc+hibernate开启事务时卡死

使用springmvc+hibernate部署的一个web项目,在windows下可以正常访问数据库,迁移到mac或者Linux时就卡死,下面贴出卡死处部分代码: 卡死处为访问数据库工具类(com.spring.db.DbManager...

one_day ⋅ 2016/08/05 ⋅ 0

ios应用有时会卡机!!!求帮助~

近来做了一款ios app,可在用的过程中,会出现卡死现象。该现象有时才会出现。8以上的系统出现的较多,特别是8.1.2。问题描述如下: 有时操作着操作着就会卡死,比如点击某个按钮,需进入下一...

大文 ⋅ 2015/07/08 ⋅ 1

chrome使用百度搜索卡死 解决办法

我用的是chrome v52.0的版本 在使用百度搜索的时候卡死我用360浏览器搜索 在使用百度搜索的时候卡死 但用百度浏览器的时候没有卡死 解决方法如下 在chrome地址栏中输入chrome://flags/ 把GPU...

大灰狼wow ⋅ 2016/09/30 ⋅ 0

HttpClient总是无限卡死,紧急

我们网站大部分功能是通过HttpClient获取其他接口提供的内容,但每隔一两天就会出现访问卡死,设置了超时时间,也无限卡死,经断点查看,是卡在closeableHttp.execute(request);开始执行这行...

天使小楠 ⋅ 2015/06/24 ⋅ 14

如何确定是程序响应慢还是网络慢?

现在有一台主服务器,仅仅只部署了nginx服务,底下有若干台web服务器用内网相连,外网都是访问这台主服务器 最近总出现问题发现经常卡死,无响应 在服务器上添加一个静态文件,直接通过nginx...

speedhao ⋅ 2016/08/31 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

懒惰根本就不存在

简评:芝加哥大学心理学教授,懒惰根本就不存在。(本文表面讲行为心理学实则讲教育) 金句:以好奇而不是判断来回应一个人的无效行为,是非常有帮助的。 本文「我」代表原作者 E Price。 自...

极光推送 ⋅ 15分钟前 ⋅ 0

Excel提取单元格中最后一个“.”后面的数据

java.lang.String ----- String =TRIM((MID(SUBSTITUTE(B2,".",REPT(" ",99)),(LEN(B2)-LEN(SUBSTITUTE(B2,".","")))*99,99)))...

klog ⋅ 17分钟前 ⋅ 0

mac远程桌面

下载安装remote-desktop-mac Mac beta 客户端 mac通过远程桌面访问windows服务器。

亚林瓜子 ⋅ 22分钟前 ⋅ 0

firrtl

动手---sbt(2)之后,再回头看 chisel第一个实验,根据 https://github.com/freechipsproject/firrtl 发现firrtl没有执行sbt assembly命令,重新执行这个命令,结果成功。如下图: joe@joe-As...

whoisliang ⋅ 26分钟前 ⋅ 0

NIO

一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。 二、通道的主要实现类 java.nio.channel...

stars永恒 ⋅ 26分钟前 ⋅ 0

Android悬浮窗的实现

0. 前言   现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。那么今天我们就来实现一下Android悬浮窗,以...

猴亮屏 ⋅ 26分钟前 ⋅ 0

日志采集中的关键技术分析

概述 日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主要的消费者是软件工程师,他们通过读取日志来排查问题,如今,大量机器日夜处理日志数据以生成可读性的报告以此...

tqyin ⋅ 28分钟前 ⋅ 0

使用Navicat将数据导出为text文本 然后再导入

将数据导出为text文本效率很高 1. 准备工作 1.1 准备表结构 1.2 目标库 执行生成表结构sql 2.将表数据导出为text文本 生成的text文本 3. 目标库 导入text 4.效果...

Lucky_Me ⋅ 33分钟前 ⋅ 0

IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)

文章介绍了idea下,项目乱码、控制台乱码及运行tomcat控制台乱码的解决方案,文章链接:https://www.cnblogs.com/vhua/p/idea_1.html

Funcy1122 ⋅ 36分钟前 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 41分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部