摄像头,视频源对话框出现

时间:2012-05-23 13:34:54

标签: windows winforms video camera webcam

所以看到很多人有同样的问题,但没有答案。我的SendMessage弹出Windows 7笔记本电脑上的“视频源”对话框,带有一个摄像头。我安装了Cyber​​ Link YouCam。 'Video Source' dialog box

如果我卸载Cyber​​ Link YouCam,“视频源”对话框就会消失。似乎操作系统就像YouCam是同一设备的第二个驱动程序一样。我的问题是如何停止出现“视频源”对话框?一旦我在对话框中选择了一个选项,我就没有得到对话框(直到我重新启动应用程序),所以必须在某个地方设置一个设置。

虽然调试发现这段代码(参见下面的整个部分)是一个似乎是调用对话框的代码 - 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
            }

        }

所以问题又是 - 如何停止出现“视频源”对话框?

5 个答案:

答案 0 :(得分:3)

我开发了一个表单,在Windows XP上使用avicap32显示两个实时捕获。我在案件中找到的修复手段也有可能适用于你的。

对于avicap,可以通过编程方式管理您的网络摄像头,以及所有基于注册表的网络摄像头。这是the thread我找到了引导我并实现我想要的目标。

在此主题中,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MediaResources\msvideo\MSVideo.VFWWDM\DevicePath注册表项的角色会突出显示,以便选择活动的网络摄像头。

这可能是一个有用的信息:我必须设置小写的值,以避免弹出视频源对话框。

我是通过使用SendMessage调用WM_CAP_CONNECT之前和之后监控注册表项来确定的。

据我所知(和谷歌搜索),没有其他人提供修复,所以即使我可能会回答一点,如果你能告诉我们它是否也适合你,那将是很好的。 / p>

答案 1 :(得分:1)

最后,我找到了解决方案。
问题发生在Windows 7/8

首先你需要这个API函数

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

然后......在你致电capCreateCaptureWindowA()之后你必须等待1秒钟处理事件,(注意:睡眠不起作用)

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

然后你打电话给WM_CAP_DRIVER_CONNECT(可能是几次)..那就是它......没有更多的视频源对话

答案 2 :(得分: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

答案 3 :(得分:0)

我有同样的问题。确保在不再需要网络摄像头时调用capDriverDisconnect。请注意,我使用的是Logitech C110,但我认为它也适用于您的情况。

答案 4 :(得分:0)

来到这里寻找&#34; WM_CAP_DRIVER_CONNECT&#34;的解决方案。和&#34;视频设置&#34;对话框弹出错误。

找到解决方案:

这是一个司机问题。使用OEM的驱动程序,因为通用Microsoft驱动程序不适用于您的相机。

使用www.astra32.com查找USB摄像头的设备信息:制造商或型号;然后google找到正确的驱动程序。

祝你好运!

相关问题