web-dev-qa-db-fra.com

Configuration du périphérique de lecture en exécutant un fichier batch/script PowerShell

Mon ordinateur (Windows 7) est branché sur le téléviseur et je change très souvent de périphérique de sortie du son entre l’audio numérique (S/PDIF) (périphérique audio haute définition) et mon casque (2- Corsair CA-HS1 USB Casque)

Je veux pouvoir exécuter un fichier batch/script qui change cela pour moi, donc je n'ai pas à cliquer avec le bouton droit de la souris sur le volume> les périphériques de lecture> "Marquer le périphérique de sortie" et à cliquer sur "Définir par défaut".

Je sais que c'est un problème de luxe, mais bon, je peux peut-être apprendre quelque chose de quelqu'un?

Toute aide appréciée!

21
haakonlu

J'avais exactement les mêmes exigences que vous et après avoir trouvé votre post, j'ai trouvé ce qui suit:

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

Malheureusement, ce n'est pas une fonction Windows native; il nécessite le téléchargement d'un petit outil de script open-source appelé AutoHotKey, mais il fonctionne correctement et ne nécessite que peu de mémoire (1 ~ 2.5Mb)

Le script fourni dans l'article d'origine ne fonctionne pas pour moi. Il recherche des périphériques activés/désactivés et modifie cette valeur plutôt que de modifier le périphérique par défaut . Je l ’ai modifié pour permuter entre 2 périphériques par défaut . Il fonctionne en ouvrant votre panneau de configuration Son (mmsys. cpl), puis faites défiler la liste des périphériques de lecture vers le deuxième élément de la liste (la partie {Down 2}) . C'est parce que mes haut-parleurs sont le deuxième élément de ma liste . pour voir si le périphérique est par défaut ou non. Sinon, il le définit comme valeur par défaut et ferme la fenêtre. Si c'est déjà la valeur par défaut, il défilera encore 2 fois et le définira comme valeur par défaut.

Ainsi, vous devrez modifier les lignes {Down 2} pour qu'elles correspondent à votre propre liste de périphériques.

 #+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

Voici comment j'ai défini "Line 1" comme périphérique de lecture:

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

NirCmd est un petit utilitaire de ligne de commande à télécharger, qui vous permet de réaliser certaines tâches utiles sans afficher d'interface utilisateur.

22
Dale Newton

Le script suivant est écrit dans Windows 7 et utilise sendkeys. Il est basé sur d’autres extraits que j’ai trouvés mais que j’ajoute pour que la sélection soit cohérente et que les fenêtres parasites ne soient pas laissées affichées . Vous voudrez peut-être ajuster SleepTime pour votre système s’il est toujours lu . un raccourci avec l'index de l'élément que vous souhaitez sélectionner dans la fenêtre Périphériques de lecture en tant que premier paramètre . Vous pouvez créer une nouvelle "barre d'outils" dans votre "barre des tâches" pour sélectionner chaque périphérique en un seul clic: Image de la barre d'outils de la barre des tâches

'===============================================================================
'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

Pour autant que je sache, il n’ya aucun moyen de le faire par programme. Il s'agit d'une conception délibérée, car Microsoft ne veut pas que les applications remplacent les paramètres audio définis par l'utilisateur.

Vous trouverez la même réponse ici mais si vous utilisez des solutions qui manipulent des fenêtres, vous pouvez regarder ici .

2
JPBlanc

Suivre Dale Newton post, NirCmd est un excellent moyen de le faire. De plus, si vous le couplez avec AutoHotKey vous pouvez créer un fichier exécutable qui modifiera vos périphériques sans ouvrir les fenêtres CMD embêtantes à chaque fois que vous l’exécutez. Par exemple, je change tout le temps de deux sources: l'une est mon casque d'écoute et l'autre, mon moniteur. Pour mon moniteur, j'ai créé un script ahk qui fait ceci:

#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

Et un autre pour mes écouteurs avec les deux dernières lignes changé à:

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

Ensuite, vous pouvez compiler chaque script ahk dans un fichier exe et lier chaque fichier exe à une macro de clavier afin que vous puissiez les exécuter en appuyant quelques fois sur la touche. Personnellement, j'utilise un Corsair K95, j'utilise donc leur logiciel pour les associer à mes touches «G».

À noter également que si vous êtes dans vos préférences audio, vous pouvez renommer n’importe quel appareil afin d’éviter les conflits de noms.

2
BaneOfSerenity

Cela n’est peut-être pas lié au fait de changer de périphérique audio via un script, mais mon ordinateur est également branché à mon téléviseur via HDMI.

Lorsque je veux regarder des fichiers vidéo sur le téléviseur, j'utilise Media Player Classic Home Cinema. Cela me permet de spécifier le périphérique audio de MPH: HC dans les options sans basculer mon périphérique audio par défaut sur l'ensemble de l'ordinateur.

Si votre utilisation est similaire à la mienne, peut-être que MPC: HC résoudra votre problème.

0
HungryHippos

Notez que si vous utilisez des "haut-parleurs nircmd setdefaultsounddevice" dans un script de connexion d'entreprise ou d'environnement éducatif, le son sortira toujours des haut-parleurs lorsque des écouteurs seront branchés.

0
js2010

J'avais un appareil HDMI qui changeait constamment de nom. Aucune des solutions existantes ne fonctionnait pour moi. 

Je me suis finalement retrouvé avec cette PowerShell et l’utilisation du NirCmd app. 

$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
0
Nigel Thorne