多线程程序下,如何找到指定的窗口句柄?

thinkingwhy 2013-07-04 07:35:16
大家好,我对MFC不是熟悉,所以希望大家能帮帮忙,问题是这样的:
客户端程序是一个多线程程序,假设有一个在后台负责完成具体任务的线程A,
在线程A完成了任务之后,需要通知到UI,我就在线程A中通过PostMessage发送
一个消息到UI,但是PostMessage这个API需要接收消息的窗口句柄这个参数,
那么我该如何获取到指定的窗口句柄?

我之前用的FindWindow这个API来完成的,通过传递某个窗口的标题来获取这个
窗口的指针,然后获取其句柄,虽然没有什么大的问题,但是如果同时运行
多个客户端,那么这个时候就会有多个相同标题的窗口,找到的可能就不是
需要接收消息的窗口了,即可能找到的是另一个客户端的这个窗口,请问下,
这种情况应该如何解决?

我试了几个诸如GetActiveWindow之类的API,都没能得到想要的结果,难道是
我的思路有问题?
...全文
1321 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2013-07-05
  • 打赏
  • 举报
回复
线程A调用前先保存UI的句柄啊。
oyljerry 2013-07-04
  • 打赏
  • 举报
回复
引用 2 楼 thinkingwhy 的回复:
[quote=引用 1 楼 oyljerry 的回复:] 运行多个客户端,那么就EnumWindows,然后一个个查找
多谢版主的回答 如果使用EnumWindows的话,那么我怎么判断返回的窗口就是我想要的那个窗口呢? 貌似EnumWindows回调时没有传递能表明某个窗口是哪个实例的信息吧?[/quote] 没仔细看。你这个问题应该按后面几位网友说的,通过线程传递窗口句柄,然后线程中发送消息
gg606 2013-07-04
  • 打赏
  • 举报
回复
如楼上所说,或者在创建线程时,直接把GetSafeHwnd()作为参数传递给线程函数。
worldy 2013-07-04
  • 打赏
  • 举报
回复
哪能这样干 线程函数可以接受一个LPVOID参数,允许你自定义一个结构体 ,将该该结构体传递给线程函数,你可以指定一个成员,将该次调用涉及的窗口句柄设置到该成员中,这样 线程就知道该向哪个窗口发送消息了
thinkingwhy 2013-07-04
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
运行多个客户端,那么就EnumWindows,然后一个个查找
多谢版主的回答 如果使用EnumWindows的话,那么我怎么判断返回的窗口就是我想要的那个窗口呢? 貌似EnumWindows回调时没有传递能表明某个窗口是哪个实例的信息吧?
oyljerry 2013-07-04
  • 打赏
  • 举报
回复
运行多个客户端,那么就EnumWindows,然后一个个查找

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧