Отключение веб-камеры программно под Windows - PullRequest
3 голосов
/ 08 октября 2011

Как программно отключить подключенную или встроенную веб-камеру (ы) под Windows?

Отключая их, я имею в виду, что любая программа, пытающаяся получить доступ к камерам, должна:

  • не сможет получить к ним доступ
  • иметь возможность доступа к ним, но вместо видеопотока они должны получить черную картинку

Почему я хочу это сделать:

У меня есть ноутбук с веб-камерой. Нет простого способа отключить его с помощью программного обеспечения. Я хочу создать приложение с кнопкой, которая отключает веб-камеру, так что любое приложение, которое хочет ее использовать, не сможет, и кнопкой, чтобы снова включить ее. Я не хочу ничего надевать на камеру физически, иначе я бы не стал задавать этот вопрос здесь.

Ответы [ 5 ]

3 голосов
/ 13 октября 2011

Вот две ссылки на SO, чтобы включить / отключить устройство программно:

Как отключить системное устройство?

Функция Win32 API для программного включения / выключения устройства

Существует также инструмент DevCon , который вы можете автоматизировать.

1 голос
/ 16 октября 2011

Вы можете написать приложение с помощью DirectShow, которое берет на себя управление веб-камерой, что препятствует доступу других приложений к ней.Вам, вероятно, придется использовать C ++, и вам, вероятно, понадобится Visual Studio 2005 или выше.

Начните с загрузки Windows SDK: http://go.microsoft.com/fwlink/?LinkID=129787 После установки SDK откройте Visual Studio и откройте решение по адресу:

[Корень SDK] \ Samples \ Multimedia \ DirectShow \ baseclasses \ baseclasses.sln

[Корень SDK] обычно будет выглядеть так: C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1

Постройте решение, которое создаст strmbase.lib (выпуск) или strmbasd.lib (отладка).Эта библиотека необходима для создания приложения DirectShow.

Затем откройте образец AmCap по адресу:

[Корень SDK] \ Samples \ multimedia \ directshow \ capture \ amcap \ amcap.sln

Сборка и запуск AmCap.Теперь вы должны иметь возможность контролировать веб-камеру.Вы можете использовать AmCap в качестве основы для того, что вы хотите сделать, или вы даже можете просто изменить AmCap для своих нужд.

Надеюсь, это поможет.

1 голос
/ 12 октября 2011
  1. Простое, но эффективное решение состоит в том, чтобы иметь приложение на заднем плане, которое блокирует камеру активным захватом с нее (например, захват в минимальном разрешении, фильтр Null Renderer, или, возможно, приостановленный захват будетдаже лучше).Пока ваше приложение получило доступ к камере, никто другой не мог снимать с нее.

  2. Другое решение, более сложное и несколько опасное для взаимодействия с другими приложениями, заключается в переопределении (hook, подставьте) System Device Enumerator класса и перехватите его перечисление категории устройства ввода видео.Имея это, вы можете скрыть камеру и не передавать ее перечисление приложению.Ключевое слово здесь - CoTreatAsClass, и для этого необходимо, чтобы вы были знакомы с COM.Это по-прежнему позволит старым приложениям получать доступ к камере через Video for Windows API (с которым вы можете быть в порядке).

0 голосов
/ 15 октября 2011

Ну, вам не нужно программировать для этого ... Я уверен, что вы знаете, что такое диспетчер задач.Просто создайте файл .bat (он же файл .exe), который убивает процесс веб-камеры ... и получите другой файл .bat, чтобы открыть его обратно?Я имею в виду, что это будет работать для любой веб-камеры на Windows, НО, если вы хотите сделать это программно (верно, это слово? LOL), то вам придется предоставить нам информацию о том, что это за веб-камера и что такое ...

и на тот случай, если вы не знаете, как создать файл bat: откройте пустой .txt файл типа:

command.com taskkill / IM notepad.exe

и сохраните файл как что-нибудь .bat, и обязательно измените тип файла (прямо там, где вы называете файл), щелкните там, где написано «Сохранить как тип»: * txt, и вместо этого выберите все файлы.

0 голосов
/ 09 октября 2011

Единственный способ заблокировать пользователю доступ к камере, подключенной к системе, - удалить для нее драйвер. Это было бы крайне недружелюбным делом !!

Если вы хотите заблокировать использование системного устройства из вашего приложения, то все, что вам нужно сделать, - это удалить устройство-нарушитель из списка доступных устройств, показанного пользователю.

Вопрос: Почему вы хотите это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...