web-dev-qa-db-ja.com

バッチファイル/ PowerShellスクリプトを実行して再生デバイスを設定する

コンピューター(Windows 7)をテレビに接続しましたが、デジタルオーディオ(S/PDIF)(高解像度オーディオデバイス)とヘッドセット(2- Corsair CA-HS1 USBヘッドセット)

これを変更するバッチ/スクリプトファイルを実行できるようにしたいので、「ボリュームを右クリック>再生デバイス>「出力デバイスをマーク」して「デフォルトに設定」をクリックする必要はありません。

私はそれが贅沢な問題であることを知っていますが、ちょっと、誰かから何かを学べるかもしれません。

すべての助けに感謝します!

22
haakonlu

私は自分とまったく同じ要件を満たしていましたが、投稿につまずいた後、次のことがわかりました。

https://web.archive.org/web/20131231034118/http://downloadsquad.switched.com/2010/06/16/windows-7-tip-how-to-change-the-default- audio-device-with-a-hot /

残念ながら、ネイティブのWindows関数ではありません。 AutoHotKeyと呼ばれる小さなオープンソースのスクリプトツールをダウンロードする必要がありますが、うまく機能し、少量のメモリ(1〜2.5Mb)のみが必要です。

元の記事で提供されているスクリプトは、私にとってはうまくいきません。デフォルトのデバイスを変更するのではなく、有効/無効のデバイスを検索し、その値を変更します。 2つのデフォルトデバイスを切り替えるように編集しました。サウンドコントロールパネル(mmsys.cpl)を開き、再生デバイスのリストをスクロールしてリストの2番目の項目({Down 2}部分)に移動します。これは、私のスピーカーがリストの2番目の項目だからです。次に、デバイスがデフォルトであるかどうかを確認します。そうでない場合は、デフォルトとして設定し、ウィンドウを閉じます。既にデフォルトの場合は、さらに2回下にスクロールして、それをデフォルトとして設定します。

したがって、デバイスのリストに合わせて{Down 2}行を修正する必要があります。

 #+a::
Run, mmsys.cpl
WinWait,Sound
ControlSend,SysListView321,{Down 2}
ControlGet, selectedDevice, List, Focused, SysListView321
Loop, Parse, selectedDevice, %A_Tab%
    if a_index <> 3
        continue
    else 
    {
        if A_LoopField <> Default Device
        {
            ControlClick,&Set Default
            ControlClick,OK
            WinWaitClose
            SoundPlay, *-1
            return
        }
        else
        {
            ControlSend,SysListView321,{Down 2}
            ControlClick,&Set Default
            ControlClick,OK
            WinWaitClose
            SoundPlay, *-1
            return
    }       
}
9
Hoppertron

これが、再生デバイスとして「ライン1」を設定する方法です。

start /min "" G:\......\nircmd.exe setdefaultsounddevice "Line 1"

NirCmd は、ユーザーインターフェイスを表示せずにいくつかの便利なタスクを実行できる、ダウンロード可能な小さなコマンドラインユーティリティです。

23
Dale Newton

次のスクリプトはWindows 7で記述されており、sendkeysを使用しています。それは私が見つけた他のスニペットに基づいていますが、選択が一貫しており、迷子のウィンドウが表示されたままにならないように追加します。それでも再生される場合は、システムのSleepTimeを調整することをお勧めします。 [再生デバイス]ウィンドウで選択するアイテムのインデックスを最初のパラメーターとして使用して、ショートカットを使用してスクリプトを呼び出します。 「タスクバー」に新しい「ツールバー」を作成して、シングルクリックで各デバイスを選択できます。 タスクバーツールバーの画像

'===============================================================================
'This script uses sendkeys to select the Sound Output device
'First parameter should be the desired device number in 'Playback Devices' list
'===============================================================================
Option Explicit

Const SleepTime = 200

Dim WindSh

'===============================================================================
'MAIN ROTUINE
'===============================================================================
'Check the command line input
if ( Wscript.Arguments.Count <> 1)  then
  MsgBox "You must provide a single integer arguement representing the device number", vbinformation + vbokonly, Wscript.ScriptName
  Wscript.Quit 1
elseif ( false = IsNumeric( Wscript.Arguments.Item(0) ) )  then
  MsgBox "The arguement provided was not an integer number: " & Wscript.Arguments.Item(0), vbinformation + vbokonly, Wscript.ScriptName
  Wscript.Quit 2
End If

set WindSh = CreateObject("Wscript.Shell")
WindSh.run("control.exe mmsys.cpl")
do while (WindSh.AppActivate("Sound") = false)
  WScript.Sleep SleepTime
loop
WindSh.sendkeys("{DOWN " & Clng( Wscript.Arguments.Item(0) ) & "}")
WScript.Sleep SleepTime
WindSh.sendkeys("{TAB 2}")
WScript.Sleep SleepTime
WindSh.sendkeys("{ENTER}")
WScript.Sleep SleepTime
WindSh.sendkeys("%{F4}")
WScript.Sleep SleepTime
if (WindSh.AppActivate("Sound") = true) then
  WindSh.sendkeys("%{F4}")
end if
2
Pagan Mace

私の知る限り、これをプログラムで行う方法はありません。マイクロソフトは、ユーザーが設定したオーディオ設定をアプリケーションが上書きすることを望まないため、これは意図的な設計です。

同じ答え here が見つかりますが、ウィンドウを操作するソリューションの場合は here になります。

2
JPBlanc

Dale Newton's 投稿をフォローアップするには、 NirCmd がこれを行うのに最適な方法です。その上で AutoHotKey とペアにすると、実行するたびに厄介なCMDウィンドウを開かずにデバイスを変更する実行可能ファイルを作成できます。たとえば、常に切り替える2つのソースがあります。1つはヘッドフォンで、もう1つはモニターです。私のモニターでは、これを行うahkスクリプトを作成しました。

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir% ;I have nircmd in the same folder as these scripts
Run, nircmd setdefaultsounddevice "Acer X34-8" 1
Run, nircmd setdefaultsounddevice "Acer X34-8" 2

そして、最後の2行が次のように変更された私のヘッドフォン用の別のもの:

Run, nircmd setdefaultsounddevice "Headset Earphone" 1
Run, nircmd setdefaultsounddevice "Headset Earphone" 2

その後、各ahkスクリプトをexeにコンパイルし、各exeをキーボードマクロにバインドして、キーを数回押すだけで実行できるようにします。個人的にはCorsair K95を使用しているため、ソフトウェアを使用してこれらを「G」キーにバインドします。

また、サウンドの設定を行っている場合は、デバイスの名前を変更して名前の競合を避けることができます。

2
BaneOfSerenity

名前を変え続けるHDMIデバイスがあったので、既存のソリューションはどれもうまくいきませんでした。

最終的にこのPowerShellと NirCmd アプリの使用になりました。

#File: TV.ps1
$name = "SMART*"

# list active audio playback devices.   (Note for cature devices change Render to Capture)
$device = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\*\" | where {$_."DeviceState" -eq 1} | foreach-object -Process {(Get-ItemPropertyValue -Path ($_.PSPath + "\Properties\") -Name "{a45c254e-df1c-4efd-8020-67d146a850e0},2")} | Where-Object {$_ -like $name}

C:\bin\NIRCMDC setdefaultsounddevice $device 1
C:\bin\NIRCMDC setdefaultsounddevice $device 2
2
Nigel Thorne

スクリプトを介したオーディオデバイスの切り替えとは関係ないかもしれませんが、コンピューターをHDMI経由でテレビに接続することもできます。

テレビでビデオファイルを見たいときは、Media Player Classicホームシネマを使用します。これにより、コンピューター全体でデフォルトのサウンドデバイスを切り替えることなく、オプションでMPH:HCのオーディオデバイスを指定できます。

あなたの使用法が私のものに似ている場合、MPC:HCが問題を解決するかもしれません。

0
HungryHippos

エンタープライズ環境または教育環境のログインスクリプトで「nircmd setdefaultsounddevice speaker」を使用する場合、ヘッドフォンが接続されているとスピーカーから音が出ることに注意してください。

0
js2010