java GetWindowText_GetWindowText 卡死

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

int GenHwndByTitle(CString title,vector& 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这里。

原因网上有很多:

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

解决办法:

使用新API:InternalGetWindowText替换GetWindowText

就像下面这样

//通过窗口获取句柄

int GenHwndByTitle(CString title,vector& 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;

}

问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值