0

結果を後のプロセスのサインとして受け取りたいので、かなりトリッキーです。ウィンドウが点滅すると、ユーザーにとって奇妙になります。

4

5 に答える 5

1

(これは答えではありません。質問を更新して詳細を追加するだけです:)

次のようなコードでビデオキャプチャドライバー(Webカメラ)を開く必要があるとします(デルファイですが、簡単に理解できます)。

result:= SendMessage(hCapWnd, WM_CAP_DRIVER_CONNECT, FDriverNo, 0);

カメラ/ウェブカメラがビジー状態の場合(ムービーメーカーなどの別のアプリケーションによって開かれた場合)を除いて、正常に動作します。次に、キャプチャドライバは、アプリケーションをブロックする「ビデオソースの選択」ウィンドウを突然表示します(ただし、録画を続けるムービーメーカーは表示されません)。SendMessage関数はモーダルになり、不要なウィンドウが閉じられるまで戻りません。

キャプチャドライバが別のアプリケーションに接続する前にビジーであるかどうかを検出する方法はありますか?

ありがとう

于 2010-01-01T20:14:35.373 に答える
0

ブロードキャストメッセージを送信することはできるのだろうか。つまり、システム内のすべてのウィンドウにVFW情報要求メッセージを送信するとします。次に、実際にVFW処理を実行しているすべてのウィンドウがステータス情報に応答し、どのウィンドウがビデオ処理を実行しているかがわかります。ある種の叫び声「ここに誰か…?」

しかし、それはブルートフォース、あるいはハッキングのように見えます。私はそれをテストするかもしれません...そうではないかもしれません。ビデオキャプチャドライバが別のアプリケーションでビジーであるかどうかを知るためのよりスマートな方法が必要だと確信しています。

(ところで...ここに誰か?)

于 2010-01-03T18:05:13.587 に答える
0

これは決して良い解決策ではありませんが、WM_CAP_DRIVER_CONNECT メッセージを送信する直前にデバイス マネージャーでカメラを無効にしてから有効にすると、何らかの理由でビデオ ソース ウィンドウが表示されず、関数が戻って正常に動作することがわかりました。したがって、私が取り組んでいたスクリプトでは、devcon.exe をダウンロードする必要があり、「devcon disable *PID_3450*MI_00*」と「devcon enable *PID_3450*MI_00*」を WM_CAP_DRIVER_CONNECT の直前に配置すると、一貫して動作するようです。残念ながら、デバイスを無効/有効にするには、管理者として実行する必要があります。これも決して適切な修正ではありません... (私のカメラのハードウェア ID は USB\VID_0AC8&PID_3450&MI_00 です)

于 2013-12-26T06:37:59.753 に答える
0

私はそれが起こるのではないかと恐れていました。

最初に、システムで開いているすべてのウィンドウを列挙し、次に各 HWND に対して次の命令を実行しました。これは、ドライバー情報 (パスカル構文) を要求するだけです。

SendMessage(h, WM_CAP_DRIVER_GET_NAME, length(driver)*sizeof(char), LPARAM(PChar(driver))

Msdn helpによると、WM_CAP_DRIVER_GET_NAME の結果は次のとおりです。

「成功した場合は TRUE を返し、キャプチャ ウィンドウがキャプチャ ドライバに接続されていない場合は FALSEを返します」

(太字は私のものです)。したがって、次のことを知ることは良い方法のようです。

1-ウィンドウがキャプチャしている場合。したがって、キャプチャしているかどうかに関係なく、すべてのウィンドウに適用できます。
2-そうであれば、どのドライバーが使用されているかがわかります。

ただし、最初のテスト ラウンドの後、結果は次のとおりでした:
- タスク マネージャー (実行中) がクラッシュして閉じた
- エクスプローラーがクラッシュして閉じた (再び自動的に再び開いた)
- Belkin ワイヤレス モニター (PC の WiFi ドライバー) がクラッシュして閉じた
- Eset Nod32 アンチウイルスがクラッシュした、閉じていません

最初の結論は、これは、システム内でビデオをキャプチャしているアプリケーションを特定する方法としては不適切であるということです。しかし、バグの可能性を確実に却下する必要があります。

どんどん報告します。

于 2010-01-06T13:20:54.163 に答える