2010-11-30 10 views
1

私はウェブカメラを開こうとするdelphiアプリを持っています。 Windows 7 it failsの下で(これは別の話/ question /スレッド)、ウェブカメラドライバは「ビデオソース」というタイトルのダイアログをポップアップして、私に選択を促します。私がループ内で繰り返しドライバを開き、表示されるたびに手動でダイアログを閉じると、私は動くことができます。だから私は私のアプリからのダイアログを閉じたいと思います。 FindWindow(nil、 'Video Source')はそれを見つけません。私がプロセスエクスプローラで見ると、ダイアログは私のアプリケーションに属するものとして表示されます。私は強制的にPEからそれを閉じると、私のアプリを閉じます!このダイアログを閉じる方法は?このダイアログが開いている間に私のアプリがハングしている疑いがある(確認済み)ので、ダイアログを閉じるコードを実行するのがかなり難しくなります。デルファイアプリからドライバからポップアップされたダイアログを閉じる

答えて

1

このポップアップダイアログのためにメインアプリケーションスレッドがユーザー入力を待っている場合、唯一の解決策は、このポップアップの検索を定期的に試みる別のスレッドを実行することです。それが見つかると、PostMessageを使用してWM_CLOSEなどのポップアップハンドルを使用します。ポップアップのボタンにmousedown/mouseupのいずれかのメッセージを送信する必要があります。

さらに、Windows API WindowFromPointを使用してポップアップウィンドウについて調べる小さなデバッグアプリケーションを作成します。表示されているキャプションだけでなく、クラスです。また、このデバッグプログラムを使用してFindWindowを正しく動作させることもできます。

+0

WinSpyまたはSpy ++を使用して、そのクラスを含む情報を調べることもできます。あなた自身のアプリを書く必要はありません。 –

+0

メインスレッドは停止しましたが、タイマーイベントはまだ起動しました。すべてのウィンドウを列挙するためにすばやく汚れていました。私は、クラス= '#32770'とtitle = 'Video Source'を探して、アプリに1秒のタイマールーチンを追加し、WM_CLOSEを発行しました。オープニングをやり直すためのループと連動して、私はそれを得ましたが、あまりにもかわいいわけではありません。 Windows 7の既知の問題と思われます。 – rossmcm

関連する問題