web-dev-qa-db-ja.com

外部Webカメラが接続されているときに統合Webカメラを自動的に無効にしますか?

私はラップトップをデスクトップとして頻繁に使用しますが、その時間の約75%です。デスクトップセットアップとして、モニター、スピーカー、キーボード、マウス、ウェブカメラが外部接続されています。後者の3つはUSB経由です。
次に、統合されたWebカメラが顔認識やビデオチャットに使用できなくなるように配置されますが、私が使用するプログラムの中には、デフォルトのWebカメラを選択する方法を提供しないものがあります。

そのため、ユーティリティやスクリプトなどを使用して、外部のWebカメラが接続されているときに組み込みのWebカメラを自動的に無効にする方法があるかどうか疑問に思いました。

(それが役立つ場合は、Asus Zenbook PrimeUX32VDでWindows7を使用しています。)

1
oKtosiTe

最初の理論

  • 定期的にチェック外部ウェブカメラがコンピューターに接続されているかどうかを確認する必要があります。
  • external Webカメラがpluged inの場合、built-in 1つはdisabledである必要があります。
  • 次に、built-inデバイスはenabledに戻り、externalカメラがnpluggedになります。

準備手順

提案されたソリューションは、バッチスクリプトとタスクスケジューリング技術を使用してこれらすべてを処理します。実際にジューシーな部分にジャンプする前に、いくつかのことを行う必要があります。

デバイスコンソール(DevCon)ユーティリティを入手する

DevCon は、デバイスに関する詳細情報を表示するコマンドラインツールであり、コマンドラインからデバイスを検索して操作できます。 DevConは、ローカルコンピューター上のデバイスを有効化、無効化、インストール、構成、および削除し、ローカルコンピューターとリモートコンピューター上のデバイスに関する詳細情報を表示します。

  1. オペレーティングシステムに応じて、適切な.cabパッケージをダウンロードします。

  2. .cabアーカイブを開き、fil[some letters and numbers]という名前のファイルを抽出します。約80KBである必要があります。

  3. 名前をdevcon.exeに変更します。

デバイスを有効/無効にするには、devcon.exeを管理者権限で実行する必要があります。

必要なハードウェア識別子を決定します

Windowsは、特別な識別子のセットを使用して、デバイスとそれらが属するセットアップクラスを識別します。これらの識別子は、ハードウェアデバイスをWindowsとの通信を可能にするデバイスドライバーと照合するために使用されます。

1つ以上のデバイスIDが、製造元によってデバイスに割り当てられます。それらの1つであるハードウェアIDは、デバイスのメーカー、モデル、さらにはファームウェアバージョンに至るまで非常に具体的です。他のデバイスIDも割り当てられており、より一般的であり、IDは、あるレベルで互換性のあるメーカーの他のデバイスに割り当てられている可能性があります。

出典: デバイスのハードウェアIDとデバイスセットアップクラスの検出

  1. 外部ウェブカメラをに接続します。
  2. デバイスマネージャを開きます(devmgmt.msc)。
  3. リストから内蔵カメラを見つけます。
  4. デバイスのエントリを右クリックし、プロパティをクリックします。
  5. 詳細タブを選択し、プロパティリストからハードウェアIDを選択します。
  6. 表示された最初の値を右クリックしてコピーします。どこかの値に注意してください。
  7. 外部Webカメラに対して手順3〜6を繰り返します。

バッチスクリプトの作成

  1. 次のコードをWebcamCheck.cmdとして保存します。

     @ echo off 
     
     REMは、少なくとも2つのパラメーターがあることを確認します
     if "%〜2" == "" exit/b 2 
     
     REMはdevcon.exeが欠落していないことを確認します
     cd/d "%〜dp0" 
    存在しない場合devcon.exeexit/b 3 
     
     REMは、指定されていない場合、間隔を15秒に設定します
     if "%〜3" == ""(set interval = 15)else(set interval =%3)
     
    : poll 
     for/f "tokens = 1 delims = \" %% G in( "%〜2")do(devcon.exe find * %% G * | findstr/i/c: "%〜2 "> nul)
     goto:check%errorlevel%
     
    :check0 
     devcon.exeステータス"%〜1 "| findstr/i/c: "disabled"> nul 
     if%errorlevel%== 1(devcon.exe disable "%〜1")
     
    :wait 
     timeout/t%interval%/ nobreak> nul 
     goto:poll 
     
    :check1 
     devcon.exe status "%〜1" | findstr/i/c: "disabled"> nul 
     if%errorlevel%== 0(devcon.exe enable "%〜1")
     goto:wait 
    
  2. devcon.exeファイルをコピーして、保存したファイルと同じディレクトリに貼り付けます。

使い方

スクリプトは3つのパラメーターを取ります。最初のパラメーターはターゲットデバイスID(組み込みのWebカメラ)です。 2つ目はトリガーデバイスID(外部Webカメラ)です。 3つ目はポーリング間隔(秒単位)で、オプションです。

最初に、スクリプトは十分なパラメーターがあり、devcon.exeが欠落していないことを確認します。

ポーリング間隔が指定されていない場合、代わりにデフォルト値(15秒)が使用されます。この値は、各デバイスチェックの間に経過する秒数を決定するために使用されます。値を下げると、検出が速くなり、システムのオーバーヘッドが増えることを意味します。別の値を試す前に、デフォルトの値でテストして、どのようになるかを確認してください。いずれにせよ、10秒未満にすることはお勧めしません。

バッチスクリプトには、genericデバイスIDが必要です。これは、次の形式を使用します。

XXX\VID_YYYY&PID_ZZZZ

XXXはデバイスクラス(USB、PCIなど)です。 YYYYはベンダーIDであり、ハードウェアメーカーに割り当てられた一意の値です。 ZZZZは、デバイスモデルを識別する製品IDです。

たとえば、次のようなデバイスIDを取得した場合:

USB\VID_1D4D&PID_1002&REV_0039&MI_00

一般的なIDは次のようになります。

USB\VID_1D4D&PID_1002

トリガーデバイス(外部Webカメラ)が接続されているかどうかを確認した後、スクリプトは、ターゲットデバイス(組み込みWebカメラ)が既に無効/有効になっていない限り、無効または有効にします。

スケジュールする

今必要なのは、ログオン時にバッチスクリプトを自動的に開始することだけです。

  1. タスクスケジューラ(taskschd.msc)を開き、アクション>タスクの作成をクリックします。
  2. WebcamCheckという名前を付けます。
  3. 一般タブで、ユーザーまたはグループの変更をクリックします。
  4. テキストボックスにsystemと入力し、[名前の確認]をクリックしてから、[〜#〜] ok [〜#〜]をクリックします。
  5. 最高の権限で実行オプションを有効にします。
  6. Configure forの値をWindows 7、Windows Server 2008 R2に変更します。
  7. Triggersタブを選択し、Newをクリックします。
  8. タスクの開始ログオン時に変更し、[〜#〜] ok [〜#〜]を押します。
  9. Actionsタブに切り替えて、Newをクリックします。
  10. Program/scriptテキストボックスに"X:\Path\to\WebcamCheck.cmd"と入力し、実際のファイルパスに置き換えます。
  11. 引数の追加テキストボックスに"XXX\VID_YYYY&PID_ZZZZ" "AAA\VID_BBBB&PID_CCCC"と入力し、デバイスIDを適切な値に置き換えます。
  12. 条件タブをクリックし、チェックを外しますコンピュータがAC電源になっている場合にのみタスクを開始しますオプション。
  13. 設定タブを選択し、タスクのオンデマンド実行を許可するフィールドとタスクがより長く実行される場合はタスクを停止するフィールドの両方のチェックを外します。
  14. スケジュールされた開始を逃した後できるだけ早くタスクを実行するオプションを有効にします。
  15. 他のすべての設定はデフォルト値のままにして、[〜#〜] ok [〜#〜]を押します。

内蔵ウェブカメラをできるだけ早く無効にしたい場合は、ログインする前に外部ウェブカメラを接続してください。


更新

これは、起動時にのみ外部カメラをチェックして終了するバッチスクリプトの簡略版です。

@echo off

REM ensure there at least 2 parameters
if "%~2" == "" exit /b 2

REM verify devcon.exe is not missing
cd /d "%~dp0"
if not exist devcon.exe exit /b 3

:check
for /f "tokens=1 delims=\" %%G in ("%~2") do (devcon.exe find *%%G* | findstr /i /c:"%~2" >nul)
goto :check%errorlevel%

:check0
devcon.exe status "%~1" | findstr /i /c:"disabled" >nul
if %errorlevel% == 1 (devcon.exe disable "%~1")
exit /b

:check1
devcon.exe status "%~1" | findstr /i /c:"disabled" >nul
if %errorlevel% == 0 (devcon.exe enable "%~1")
exit /b
5
and31415

ポータブルフリーウェアアプリケーション「WebCamOn-Offv1.0」を試すことができます。Cmdサポートもあります http://www.sordum.org/8585/webcam-on-off-dont-let-your-webcam -spy-on-you /

0
tarkan dost

コントロールパネルまたはデバイスマネージャーでWebカメラを無効にすることができます。これにより、外部Webカメラをインストールして、現在実行されている唯一のWebカメラにすることができます。その後、いつでもデバイスを再度有効にすることができます。

お役に立てれば。

0
XcisioN