-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 に答える