关于查找应用程序句柄和关闭程序的一系列问题?

lirg8405 2010-11-11 02:43:56
我想实现如下功能:
运行主程序A,然后运行另一程序B;然后B发消息给A,如发WM_CLOSE关闭A,然后等待A关闭后再执行后面的代码,如何实现?
主要是有两个问题:
1、怎样得到A的句柄?用来发消息用(我是这样用的:用ShellExecute把A程序的m_hWnd发过去,B得到后转为句柄发消息关闭。测试的时候可以关闭。我有个问题就是,这个句柄是不是唯一的,通过这样得到的句柄就是A的句柄?
2、怎样等待A关闭?WaitForSingleObject行吗?

希望高手不吝赐教!
...全文
283 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ282881515 2010-11-13
  • 打赏
  • 举报
回复
根据进程名字 枚举进程列表找进程句柄
grf9527 2010-11-13
  • 打赏
  • 举报
回复
可以在一个程序关闭前的on_close事件中发一个消息给另外一个,表示要关闭了,为了稳妥起见,另外一个在收到消息后扫描关闭程序的窗口,如果找不到了,或者扫描进程,找不到了,表示关闭了。

楼主啊,我告诉你一个目前比较容易且比较靠谱的办法,别用windows自己的机制,用rabbitmq ,这样能够充分保证你的进程间通信正常。
sd6814466 2010-11-13
  • 打赏
  • 举报
回复
如果是单个实例的话,theApp.m_hWnd和FindWindow得到的句柄照理应该是一样的吧
但是有一次我用这两种途径去获取,再操作,好像结果又不一样的,有一个失效了,忘了是哪个了。。。

多个实例的话,两者应该是theApp.m_hWnd可靠一点吧
lirg8405 2010-11-12
  • 打赏
  • 举报
回复
谢谢各位,因为上班的电脑不能上网,要上网要去专门的电脑,所以白天一般不上网的
我现在测试,theApp.m_hWnd和FindWindow得到的名柄是一样的,为什么会这样??
我就是不确定,两者是不是肯定相等的
信阳毛尖 2010-11-12
  • 打赏
  • 举报
回复
A程序如果可以启动多个实例,窗口句柄就不唯一了,如果每个窗口的标题不一样,你可以用HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow)函数逐个找到窗口的句柄再发送消息来关闭它

这样比较麻烦,进程应该是一样的,通过窗口句柄找到进程,再来关闭进程就行了


GetWindowThreadProcessId(HWND//窗口句柄, g_dwThreadIdMsn);
tigerMayDo 2010-11-12
  • 打赏
  • 举报
回复
应该直接B1找到的就是A1 不会是A 你试一下
A1 B1 有没父子关系 有就用GetParent()
lirg8405 2010-11-12
  • 打赏
  • 举报
回复
是这样的,A会运行一个B
又运行A1会运行B1
这个时候我关闭B1的时候应该关闭A1
用FindWindow的话我怎么知道是A1而不是A
tigerMayDo 2010-11-12
  • 打赏
  • 举报
回复
HWND hwnd = FindWindow(classname,caption);
hwnd = ::GetWindow(hwnd,GW_HWNDNEXT);得到下一个实例
lirg8405 2010-11-12
  • 打赏
  • 举报
回复
谢谢,主要是这个A的窗口句柄,我用第一种方式得到的是不是就是A的窗口句柄?
用FindWindow查找如果是开多个A的话有问题的吧?
Eleven 2010-11-11
  • 打赏
  • 举报
回复
1.找到A的窗口句柄
2.通过A的窗口句柄得到进程句柄
visualwind 2010-11-11
  • 打赏
  • 举报
回复
1 是唯一
2 对,不过要先得到A的进程句柄
superarhow 2010-11-11
  • 打赏
  • 举报
回复
A程序如果可以启动多个实例不就不是唯一的了么. 你这里说的句柄是窗口句柄吧,应该得到进程ID然后OpenProcess再WaitForSingleObject.
通常最简单的做法是A在创建窗口的时候,创建一个用GUID作为窗口名,这样应该是唯一的,然后B用FindWindow来找到它.从窗口句柄获得进程ID可以用GetWindowProcessID的API.

16,472

社区成员

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

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

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