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

Windows 网络摄像头,视频源对话框出现,windows,winforms,video,camera,webcam,Windows,Winforms,Video,Camera,Webcam,所以我看到很多人都有同样的问题,但没有答案。我的SendMessage弹出“视频源”对话框,在装有一个摄像头的Windows7笔记本电脑上。我已经安装了网络链接YouCam。 如果我卸载Cyber Link YouCam,“视频源”对话框就会消失。看起来操作系统就像YouCam是同一设备的第二个驱动程序。我的问题是如何阻止“视频源”对话框出现?一旦我在对话框中选择了一个选项,我就不会看到对话框(直到我重新启动应用程序),所以必须在某个地方设置一个设置 尽管调试发现这段代码(参见下面的整个部分)

所以我看到很多人都有同样的问题,但没有答案。我的SendMessage弹出“视频源”对话框,在装有一个摄像头的Windows7笔记本电脑上。我已经安装了网络链接YouCam。

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

尽管调试发现这段代码(参见下面的整个部分)似乎就是调用对话框SendMessage(deviceHandle,WM_CAP_CONNECT,deviceno,((IntPtr)0).ToInt32()的代码


因此,问题是-如何阻止“视频源”对话框出现?

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

在avicap的情况下,可以通过编程方式管理网络摄像头以及所有基于注册表的内容。这里是我找到的指引我并实现我想要的

在此线程中,
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\MediaResources\msvideo\msvideo.VFWWDM\DevicePath
注册表项的角色将突出显示,以便选择活动的网络摄像头

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

我通过使用
WM\u CAP\u CONNECT
在调用
SendMessage
前后监视注册表项来确定它


据我所知(和谷歌搜索),没有其他人提供修复,因此,即使我可能会晚一点回答,如果您能告诉我们它是否也适用于您,那就太好了。

我开发了一个表单,在Windows XP上用avicap32显示两个实时捕获。我在我的案例中找到的解决方案有可能也适用于你的

在avicap的情况下,可以通过编程方式管理网络摄像头以及所有基于注册表的内容。这里是我找到的指引我并实现我想要的

在此线程中,
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\MediaResources\msvideo\msvideo.VFWWDM\DevicePath
注册表项的角色将突出显示,以便选择活动的网络摄像头

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

我通过使用
WM\u CAP\u CONNECT
在调用
SendMessage
前后监视注册表项来确定它


就我所知(和谷歌搜索),没有其他人提供解决方案,所以即使我可能会晚一点回答,如果你能告诉我们它是否对你也有效,那就太好了。

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

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

最后我找到了解决方案。
这个问题发生在Windows7/8中

首先,您需要这个API函数

Private Declare Function GetTickCount Lib "kernel32" () As Long
然后。。。调用
capCreateCaptureWindowA()
后,您必须等待1秒处理事件(注意:睡眠不起作用)

IniTime=GetTickCount()
而GetTickCount()<(IniTime+1000)
多芬特
温德

然后你调用
WM\u CAP\u DRIVER\u CONNECT
(可能几次)。。就这样。。。没有更多的视频源对话框

最后我找到了解决方案。
这个问题发生在Windows7/8中

首先,您需要这个API函数

Private Declare Function GetTickCount Lib "kernel32" () As Long
然后。。。调用
capCreateCaptureWindowA()
后,您必须等待1秒处理事件(注意:睡眠不起作用)

IniTime=GetTickCount()
而GetTickCount()<(IniTime+1000)
多芬特
温德

然后你调用
WM\u CAP\u DRIVER\u CONNECT
(可能几次)。。就这样。。。无需更多视频源对话框

使用此解决方案,它可以完美地工作。等待事件的
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
Private Sub-PreviewVideo(ByVal-pbCtrl作为PictureBox)
hWnd=capCreateCaptureWindowA(视频源,可见或子对象,0,0,0,
0,pbCtrl.Handle.ToInt64,0)
Dim IniTime As Long=GetTickCount()
而GetTickCount()<(IniTime+1000)
Application.DoEvents()
结束时
答案为布尔值=假
对于xretries,整数=1到10
“我只给你10次连接尝试,否则我就要离开微软了!”!
OKAnswer=SendMessage(hWnd,WM\U CAP\U驱动程序\U连接,视频源,0)
如果可以,那么回答
退出
如果结束
下一个
如果可以,那么回答
发送消息(hWnd,WM\U CAP\U SET\U SCALE,True,0)
发送消息(hWnd,WM\U CAP\U SET\U PREVIEWRATE,30,0)
SendMessage(hWnd,WM\U CAP\U SET\U预览,真,0)
设置窗口位置(hWnd、hWnd_-BOTTOM、0、pbCtrl.Width、pbCtrl.Height、SWP_-NOMOVE或SWP_-NOZORDER)
其他的
破坏窗口(hWnd)
如果结束
端接头

使用此解决方案,它可以完美地工作。等待事件的
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
Private Sub-PreviewVideo(ByVal-pbCtrl作为PictureBox)
hWnd=capCreateCaptureWindowA(视频源,可见或子对象,0,0,0,
0,pbCtrl.Handle.ToInt64,0)
Dim IniTime As Long=GetTickCount()
而GetTickCount()<(IniTime+1000)
Application.DoEvents