【问题标题】:Kill self if hWnd doesn't exist如果 hWnd 不存在就杀死自己
【发布时间】:2010-11-12 09:24:22
【问题描述】:

我有一个 c++ 控制台应用程序,它启动另一个应用程序并通过 com.我有生成的窗口的 hWnd,如果 COM 应用程序不再打开,我希望控制台应用程序自行终止。我该怎么做呢?

【问题讨论】:

    标签: c++ windows


    【解决方案1】:

    由于您已经在应用程序之间进行通信,因此您应该设置一个信号,当窗口关闭时,它会向控制台应用程序发送一条“我死了”消息。然后您的控制台应用程序可以适当地关闭。

    如果你想通过检查 hWnd 来做到这一点,你可以简单地使用 'IsWindow()' 函数,它会让你知道 hWnd 是否不再有效。您必须通过轮询构造来执行此操作。

    另一个选项,如果另一个应用程序不是你的,这个更有用的是安装一个钩子并观察窗口被破坏。如果您想这样做,请查看 windows 挂钩,CBT 挂钩是合适的,您可以轻松观察 windows 被破坏。

    【讨论】:

    • 对不起,这是一个等待发生的竞争条件。 HWND 是一个简单的数字,可以重复使用。如果在民意调查之间发生这种情况,你就输了。
    【解决方案2】:

    调用 GetWindowThreadProcessId(),然后调用 OpenProcess()。您现在可以测试进程句柄是否已发出信号,或 Wait() 以使其发生。

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 2011-06-05
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多