首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >摄像头、视频源对话框弹出

摄像头、视频源对话框弹出
EN

Stack Overflow用户
提问于 2012-05-23 21:34:54
回答 5查看 10.3K关注 0票数 1

所以,我见过很多人都有同样的问题,但没有答案。我的SendMessage弹出了一个带有摄像头的Windows7笔记本电脑的“视频源”对话框。我安装了Cyber Link YouCam。

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

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

代码语言:javascript
运行
复制
 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
            }

        }

所以问题又来了--我该如何阻止“视频源”的对话框出现?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-10 21:55:07

我开发了一个窗体,用于在Windows XP上使用avicap32显示两个实时捕获。我在我的案例中找到的修复方法可能也适用于您的案例。

在avicap的情况下,可以通过编程方式管理您的网络摄像头,所有这些都是基于注册表的。这是我找到的the thread,它可以引导我实现我想要的东西。

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

这里可能有一条有用的信息:我必须将值设置为小写,以避免弹出Video Source对话框。

我通过在使用WM_CAP_CONNECT调用SendMessage之前和之后监视注册表项来确定它。

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

票数 3
EN

Stack Overflow用户

发布于 2014-10-03 06:12:27

最后,我找到了一个解决方案。

此问题发生在Windows 7/8中

首先,您需要此API函数

代码语言:javascript
运行
复制
Private Declare Function GetTickCount Lib "kernel32" () As Long

然后..。在调用capCreateCaptureWindowA()之后,您必须等待1秒的处理事件,(注意:睡眠不同)

代码语言:javascript
运行
复制
IniTime = GetTickCount()
While GetTickCount() < (IniTime + 1000)
   DoEvents
Wend

然后调用WM_CAP_DRIVER_CONNECT (可能会调用几次)..就是这样..。不再有视频源对话框

票数 1
EN

Stack Overflow用户

发布于 2015-06-12 10:00:07

有了这个解决方案,它就能完美地工作。等待事件的GetTickCount()与调用函数一起工作,直到它返回true。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10721085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档