1

そのため、同じ問題を抱えているが答えがない人がたくさんいます。私のSendMessageは、1台のカメラを搭載したWindows7ラップトップの[ビデオソース]ダイアログボックスをポップアップします。Cyber​​LinkYouCamをインストールしています。 [ビデオソース]ダイアログボックス

Cyber​​ Link YouCamをアンインストールすると、[ビデオソース]ダイアログが消えます。YouCamが同じデバイスの2番目のドライバーであるかのようにOSが動作しているようです。私の質問は、「ビデオソース」のダイアログボックスが表示されないようにするにはどうすればよいですか?ダイアログでオプションを選択すると、(アプリケーションを再起動するまで)ダイアログボックスが表示されないため、どこかに設定が設定されている必要があります。

デバッグで見つかったコードのこのビット(以下のセクション全体を参照)は、ダイアログボックスを呼び出すもののようです-SendMessage(deviceHandle、WM_CAP_CONNECT、deviceno、((IntPtr)0).ToInt32())

 public void StartWebCam (int height, int width, int handleofthepicturebox, int deviceno)
        {

        string deviceIndex = "" + deviceno;

        deviceHandle = capCreateCaptureWindowA (ref deviceIndex, WS_VISIBLE | WS_CHILD, 0, 0, width, height, handleofthepicturebox, 0);


        if (SendMessage (deviceHandle, WM_CAP_CONNECT, deviceno, ((IntPtr) 0).ToInt32 ()) > 0)
            {


            SendMessage (deviceHandle, WM_CAP_SET_SCALE, -1, 0);
            SendMessage (deviceHandle, WM_CAP_SET_PREVIEWRATE, 0x42, 0);
            SendMessage (deviceHandle, WM_CAP_SET_PREVIEW, -1, 0);

            }
        else
            {
            // nothing failed maybe some clean up needed
            }

        }

繰り返しになりますが、「ビデオソース」のダイアログボックスが表示されないようにするにはどうすればよいですか。

4

5 に答える 5

3

WindowsXPでavicap32を使用して2つのライブキャプチャを表示するフォームを開発しました。私の場合に見つけた修正があなたの場合にも適用される可能性があります。

avicapの場合、Webカメラをプログラムで管理することが可能であり、それはすべてレジストリベースです。これが私を導き、私が望んでいたことを達成するために私が見つけたスレッドです。

このスレッドではHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MediaResources\msvideo\MSVideo.VFWWDM\DevicePath、アクティブなWebカメラを選択するためのレジストリキーの役割が強調表示されています。

そして、ここに役立つ情報があります。[ビデオソース]ダイアログがポップアップしないように、値を小文字に設定する必要がありました。

SendMessagewithの呼び出しの前後にレジストリキーを監視することで決定しましたWM_CAP_CONNECT

私の知る限り(そしてグーグルで)、他の誰も修正を提供していないので、私が少し遅れて答えるかもしれませんが、それがあなたにもうまくいったかどうか教えていただければ幸いです。

于 2013-01-10T13:55:07.250 に答える
1

ついに私はこれに対する解決策を見つけました。
問題はWindows7/8で発生します

まず、このAPI関数が必要です

Private Declare Function GetTickCount Lib "kernel32" () As Long

次に...電話capCreateCaptureWindowA()をかけた後、イベントの処理を1秒間待つ必要があります(注:スリープは同じようには機能しません)

IniTime = GetTickCount()
While GetTickCount() < (IniTime + 1000)
   DoEvents
Wend

それからあなたは電話しますWM_CAP_DRIVER_CONNECT(多分数回)..そしてそれはそれです...これ以上のビデオソースダイアログはありません

于 2014-10-02T22:12:27.293 に答える
1

このソリューションを使用すると、完璧に機能します。イベントのGetTickCount()待機は、関数がtrueに戻るまで関数を呼び出すとともに機能しました。

Private Sub PreviewVideo(ByVal pbCtrl As PictureBox)    
    hWnd = capCreateCaptureWindowA(VideoSource, WS_VISIBLE Or WS_CHILD, 0, 0, 0,
   0, pbCtrl.Handle.ToInt64, 0)    
    Dim IniTime As Long = GetTickCount() 
    While GetTickCount() < (IniTime + 1000)
        Application.DoEvents()
    End While    
    Dim OKAnswer As Boolean = False
    For xretries As Integer = 1 To 10
          ' I'll give you Only 10 tries to connect, otherwise I AM LEAVING MICROSOFT!
          OKAnswer = SendMessage(hWnd, WM_CAP_DRIVER_CONNECT, VideoSource, 0)
          If OKAnswer Then
              Exit For
          End If    
    Next    
    If okanswer Then
          SendMessage(hWnd, WM_CAP_SET_SCALE, True, 0)
          SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0)
          SendMessage(hWnd, WM_CAP_SET_PREVIEW, True, 0)
          SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, pbCtrl.Width, pbCtrl.Height, SWP_NOMOVE Or SWP_NOZORDER)    
    Else
          DestroyWindow(hWnd)    
    End If    
End Sub
于 2015-06-12T02:00:06.637 に答える
0

私も同じ問題を抱えていました。Webカメラが不要になったら、必ずcapDriverDisconnectを呼び出してください。私はLogitechC110を使用していますが、あなたの場合にも機能するはずです。

于 2013-06-17T09:43:52.927 に答える
0

「WM_CAP_DRIVER_CONNECT」および「VideoSetup」ダイアログポップアップエラーの解決策を探してここに来ました。

解決策を見つけました:

これはドライバーの問題です。汎用Microsoftドライバーがカメラで機能しないため、OEMのドライバーを使用してください。

www.astra32.comを使用して、USBカメラのデバイス情報を確認してください:メーカーまたはモデル。次に、正しいドライバーをグーグルで検索します。

幸運を!

于 2017-07-19T18:53:09.357 に答える