Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows下以编程方式禁用网络摄像头_C#_Windows_Camera - Fatal编程技术网

C# 在Windows下以编程方式禁用网络摄像头

C# 在Windows下以编程方式禁用网络摄像头,c#,windows,camera,C#,Windows,Camera,如何在Windows下以编程方式禁用连接的或内置的网络摄像头 通过禁用它们,我的意思是任何试图访问摄像头的程序都应该: 无法访问它们 能够访问它们,但它们应该接收一张黑色图片,而不是视频提要 我为什么要这样做: 我有一台带摄像头的笔记本电脑。没有简单的方法可以通过软件禁用它。我想创建一个带有禁用网络摄像头按钮的应用程序,这样任何想要使用它的应用程序都将无法使用,并创建一个用于重新启用它的按钮。我不想在摄像头上放任何东西,否则我不会在这里问这个问题。阻止用户访问连接到系统的摄像头的唯一方法是卸

如何在Windows下以编程方式禁用连接的或内置的网络摄像头

通过禁用它们,我的意思是任何试图访问摄像头的程序都应该:

  • 无法访问它们
  • 能够访问它们,但它们应该接收一张黑色图片,而不是视频提要
我为什么要这样做:


我有一台带摄像头的笔记本电脑。没有简单的方法可以通过软件禁用它。我想创建一个带有禁用网络摄像头按钮的应用程序,这样任何想要使用它的应用程序都将无法使用,并创建一个用于重新启用它的按钮。我不想在摄像头上放任何东西,否则我不会在这里问这个问题。

阻止用户访问连接到系统的摄像头的唯一方法是卸载该摄像头的驱动程序。那将是一件极不友好的事

如果要阻止在应用程序中使用系统设备,则只需从显示给用户的可用设备列表中删除有问题的设备

问题:你为什么要这样做

  • 一个简单但有效的解决方案是,在后台安装一个应用程序,通过主动捕获来锁定相机(例如,以最小分辨率捕获到
    Null渲染器
    filter,或者暂停捕获会更好)。只要你的应用程序获得了对摄像头的访问权,就没有其他人可以从中进行拍摄

  • 另一个解决方案,对于与其他应用程序的交互来说更复杂,也有点危险,就是重新定义(hook,substitute)
    系统设备枚举器
    类,并截取其对视频输入设备类别的枚举。掌握了这一点,就可以隐藏摄影机,而不将其枚举传递给应用程序。这里的关键字是
    cotreasclass
    ,这要求您熟悉
    COM
    。这仍然允许传统应用程序通过Windows API的视频访问摄像头(您可能不介意)


  • 此处有两个链接,用于以编程方式启用/禁用设备:


    还有一个工具,你可以自动操作。

    你不需要为此编程。。。我相信你知道任务经理是什么。只需创建一个.bat文件(又名.exe文件)即可终止网络摄像头进程。。。然后用另一个.bat文件打开备份?我的意思是这适用于windows上的任何网络摄像头, 但是如果你想通过编程的方式(这个词对吗?哈哈)那么你必须向我们提供关于它是什么类型的网络摄像头之类的信息

    万一你不知道如何制作bat文件: 打开一个空的.txt文件 输入:

    command.com taskkill/IM notepad.exe


    然后将文件另存为anywhere.bat,并确保更改文件类型(在命名文件的正下方),单击显示“另存为类型:*txt”的位置,然后选择所有文件。

    您可以使用DirectShow编写一个应用程序,该应用程序控制网络摄像头,从而阻止其他应用程序访问它。您可能需要使用C++,您可能需要VisualStudio 2005或更大。

    从下载Windows SDK开始: 安装SDK后,打开Visual Studio并在以下位置打开解决方案:

    [SDK根]\Samples\Multimedia\DirectShow\baseclasses\baseclasses.sln

    [SDK根目录]通常为:C:\Program Files\Microsoft SDK\Windows\v7.1

    构建将创建strmbase.lib(release)或strmbasd.lib(debug)的解决方案。 构建DirectShow应用程序需要此库

    接下来在以下位置打开AmCap样本:

    [SDK根]\Samples\multimedia\directshow\capture\amcap\amcap.sln

    构建并运行AmCap。您现在应该能够控制网络摄像头。您可以使用AmCap作为您想要做的事情的基础,或者您甚至可以根据您的需要修改AmCap


    希望这有帮助。

    哪些摄像头?网络摄像头,通过USB连接的照相机,录像机?更具体一点。。。。你说禁用它们是什么意思?你知道,即使你可以禁用一个设备,用户也可以将其拔下并重新插入,对吗?我有一台带摄像头的笔记本电脑。没有简单的方法可以禁用它。我想创建一个应用程序,其中有一个按钮可以禁用网络摄像头,这样任何想要使用它的应用程序都将无法使用它,还有一个按钮可以重新启用它。Radu,用盖子盖住镜头。这可能是最简单的方法。@Joey,谢谢你的建议,但这不是我想要的。你可以在设备管理器中禁用设备。请注意,这不会阻止其他人插入不同的网络摄像头。这些摄像头看起来很有趣,但我如何找到所有属于摄像头的设备?@radu-您使用的是什么语言?(请用标签更新问题)我在这一点上没有语言偏好,但是我添加了C.*。@ RADU是一个链接,列出所有可用的视频捕获设备,它是在C++中的,但是HI是他们的任何方式,如果没有系统重启DEVCON需要重新启动,你显然不理解这个问题是什么。