-4

我想在句柄可用时使程序工作。我正在考虑在初始化时设置计时器......并将所有程序源插入其中,但如果我在 while 循环中处理程序时丢失了句柄,它不会让我立即关闭对话框。

BOOL WaitProcessDlg::OnInitDialog()
{
   CDialogEx::OnInitDialog();
   SetTimer(IDC_PROGRESS1, 0, NULL);
   return TRUE;
}

void WaitProcessDlg::OnTimer(UINT nIDEvent)
{
   if(::FindWindow(NULL, str)){
   tempHWND = ::FindWindow(NULL, str);
      while(tempHWND){
----------------------->>>>>>>>>>>> A LOT OF CODING <<<<<<<<<<<<<<<<----------------------
      }
   EndDialog( 0 );
   KillTimer(IDC_PROGRESS1);
    }

  CDialog::OnTimer(nIDEvent);
}

所以我的问题是当外部应用程序的句柄可能丢失时关闭对话框的最佳方法是什么,可能是插入线程或有任何其他方法可以做到这一点?

4

1 回答 1

1

听起来你需要一个 windows 挂钩。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644959(v=vs.85).aspx#whgetmessagehook

使用 WH_GETMESSAGE 您可以看到其他应用程序窗口正在处理的 Windows 事件,然后您可以等待 WM_CLOSE 出现,然后终止您的对话框。

于 2013-03-12T13:18:24.047 回答