我想实现如下功能:
运行主程序A,然后运行另一程序B;然后B发消息给A,如发WM_CLOSE关闭A,然后等待A关闭后再执行后面的代码,如何实现?
主要是有两个问题:
1、怎样得到A的句柄?用来发消息用(我是这样用的:用ShellExecute把A程序的m_hWnd发过去,B得到后转为句柄发消息关闭。测试的时候可以关闭。我有个问题就是,这个句柄是不是唯一的,通过这样得到的句柄就是A的句柄?
2、怎样等待A关闭?WaitForSingleObject行吗?希望高手不吝赐教!
运行主程序A,然后运行另一程序B;然后B发消息给A,如发WM_CLOSE关闭A,然后等待A关闭后再执行后面的代码,如何实现?
主要是有两个问题:
1、怎样得到A的句柄?用来发消息用(我是这样用的:用ShellExecute把A程序的m_hWnd发过去,B得到后转为句柄发消息关闭。测试的时候可以关闭。我有个问题就是,这个句柄是不是唯一的,通过这样得到的句柄就是A的句柄?
2、怎样等待A关闭?WaitForSingleObject行吗?希望高手不吝赐教!
通常最简单的做法是A在创建窗口的时候,创建一个用GUID作为窗口名,这样应该是唯一的,然后B用FindWindow来找到它.从窗口句柄获得进程ID可以用GetWindowProcessID的API.
用FindWindow查找如果是开多个A的话有问题的吧?
hwnd = ::GetWindow(hwnd,GW_HWNDNEXT);得到下一个实例
又运行A1会运行B1
这个时候我关闭B1的时候应该关闭A1
用FindWindow的话我怎么知道是A1而不是A
A1 B1 有没父子关系 有就用GetParent()
GetWindowThreadProcessId(HWND//窗口句柄, g_dwThreadIdMsn);
我现在测试,theApp.m_hWnd和FindWindow得到的名柄是一样的,为什么会这样??
我就是不确定,两者是不是肯定相等的
但是有一次我用这两种途径去获取,再操作,好像结果又不一样的,有一个失效了,忘了是哪个了多个实例的话,两者应该是theApp.m_hWnd可靠一点吧