如何在Windows下以编程方式禁用附加的或内置的网络摄像头?
通过禁用它们,我的意思是任何尝试访问摄像机的程序都应该:
为什么我要这样做:
我有一台带网络摄像头的笔记本电脑。没有简单的方法可以通过软件禁用它。我想创建一个带有禁用网络摄像头的按钮的应用程序,以便任何想要使用它的应用程序都无法使用,并且按钮可以重新启用它。我不想在物理上放任何东西,否则我不会在这里问这个问题。
答案 0 :(得分:3)
以下是SO上的两个链接,用于以编程方式启用/禁用设备:
How do I disable a system device?
Win32 API function to programmatically enable/disable device
还有一个可以自动化的工具DevCon。
答案 1 :(得分:1)
一个简单而有效的解决方案是在背景上安装一个应用程序,通过主动捕获来锁定相机(例如以最小分辨率捕获,到Null Renderer
过滤器,或者可能暂停捕获甚至是更好)。只要您的应用程序获得了对相机的访问权限,就没有其他人可以从中捕获。
另一个解决方案,与其他应用程序的交互更复杂且有点危险,是重新定义(挂钩,替换)System Device Enumerator
类并拦截其视频输入设备类别的枚举。掌握了这一点,您可以隐藏相机,不要将其枚举传递给应用程序。此处的关键字为CoTreatAsClass
,这要求您熟悉COM
。这仍然可以让遗留应用程序通过Video for Windows API
访问相机(您可能已经可以使用)。
答案 2 :(得分:1)
您可以使用DirectShow编写一个应用程序来控制Web摄像头,这将阻止其他应用程序访问它。您可能必须使用C ++,您可能需要Visual Studio 2005或更高版本。
首先下载Windows SDK:http://go.microsoft.com/fwlink/?LinkID=129787 安装SDK后,打开Visual Studio并在以下位置打开解决方案:
[SDK Root] \ Samples \ Multimedia \ DirectShow \ baseclasses \ baseclasses.sln
[SDK Root]通常为:C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1
构建将创建strmbase.lib(release)或strmbasd.lib(debug)的解决方案。 构建DirectShow应用程序需要此库。
接下来打开AmCap样本:
[SDK Root] \ Samples \ multimedia \ directshow \ capture \ amcap \ amcap.sln
构建并运行AmCap。您现在应该能够控制网络摄像头。您可以使用AmCap作为您想要做的事情的基础,或者您甚至可以根据自己的需要修改AmCap。
希望这有帮助。
答案 3 :(得分:0)
阻止用户访问连接到系统的摄像头的唯一方法是卸载驱动程序。这将是一个非常 不友好 的事情!!
如果您想阻止在您的应用程序中使用系统设备,那么您所要做的就是从显示给用户的可用设备列表中删除有问题的设备。
问题:你为什么要这样做?
答案 4 :(得分:-1)
嗯,你不需要为此编程......我确信你知道任务管理器是什么。只需创建一个.bat文件(也就是.exe文件)来杀死网络摄像头进程...并使用另一个.bat文件将其打开备份?我的意思是这适用于Windows上的任何网络摄像头, 但是如果你想以编程方式进行(那个词是对的吗?大声笑)那么你必须向我们提供有关它是什么类型的网络摄像头的信息......
以防万一你不知道如何制作一个bat文件: 打开一个空的.txt文件 输入:
command.com taskkill / IM notepad.exe
并将文件保存为anything.bat,并确保更改文件类型(在文件命名的位置下),单击“保存类型:* txt”,然后选择所有文件。