Activar/desactivar radio/adaptador Bluetooth desde cmd/powershell en Windows 10

Una tarea tan sencilla, se diría, y no he encontrado una solución satisfactoria. Lo que he intentado (con la reproducción de música a través de un altavoz conectado por Bluetooth para saber realmente el estado de la radio):

  • usando devcon como admin: devcon disable USB\VID_8087&PID_07DC&REV_0001 (que es el HW ID de mi adaptador Bluetooth)... requiere reiniciar para funcionar...
  • usando powershell como admin: Disable-NetAdapter "Bluetooth Network Connection 3" (que es la traducción del nombre de mi adaptador Bluetooth)... desactiva el controlador PAN, pero un altavoz Bluetooth sigue reproduciendo música...
  • usando net como admin: net stop bthserv... en realidad no apaga la radio (el altavoz BT sigue reproduciendo música)
  • usando .NET: La página más relevante en MSDN no dice ni una palabra sobre encender/apagar el adaptador.
  • usando explorer: ms-settings:bluetooth o explorer.exe %LocalAppData%\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\cs-CZ\AAA_SettingsPagePCSystemBluetooth.settingcontent-ms... abre el panel de configuración de Bluetooth, pero sigo teniendo que hacer clic en el conmutador

No puedo creer que Microsoft sea tan ignorante como para no proporcionar un comando de este tipo...

Después de renunciar a buscar soluciones prefabricadas, he descubierto que las aplicaciones de la Plataforma Universal de Windows tienen acceso a la API de radiocontrol.

Así que fusioné un ejemplo de aplicación de radiocontrol con una aplicación controlada por línea de comandos, y el resultado está aquí: https://github.com/peci1/RadioControl . Está publicada en Windows Store.

En general, no es posible simplemente dejar que la aplicación se ejecute en segundo plano, por lo que necesita para poner en marcha primero la interfaz gráfica de usuario, y luego se puede llamar desde la línea de comandos como

radiocontrol.exe 0 on
radiocontrol.exe Bluetooth off

Las características básicas que esta aplicación necesita son:

using Windows.Devices.Radios;
await Radio.RequestAccessAsync();
var radios = await Radio.GetRadiosAsync();
await radios[0].SetStateAsync(RadioState.On);

A continuación, también es necesario añadir la capacidad de Radios al manifiesto de la aplicación:

Y para permitir el control desde la línea de comandos, es necesario anular el método protected override async void OnActivated(IActivatedEventArgs args) en App.xaml.cs y hacer el procesamiento en una rama como esta:

switch (args.Kind)
        {
            case ActivationKind.CommandLineLaunch:
Comentarios (2)

He aquí una solución parcial: wmic path Win32_PNPEntity where "caption like '%bluetooth%' AND DeviceID like 'USB\%'" call disable ciertamente hace desaparecer el interruptor Bluetooth On/Off y el Administrador de Dispositivos informa Este dispositivo está deshabilitado. (Código 22). Si eso'es suficiente para matar a la radio, no estoy seguro.

No soy capaz de encontrar documentación sobre qué argumentos acepta call. Creo que debería haber algún tipo de rfkill aquí.

Comentarios (1)

Ejecutar el siguiente comando desde el Símbolo del sistema (como administrador) funcionó:

netsh interface set interface name="Bluetooth Network Connection" admin=disabled

Yo había utilizado previamente el mismo comando para desactivar mi adaptador Wi-Fi, y encontró que también trabajó con los otros adaptadores en: Panel de control > Red e Internet > Conexiones de red. Sólo cambia el argumento "nombre" por el nombre de tu adaptador. También puedes habilitarlo de nuevo cambiando el último argumento por admin=enabled.

Comentarios (5)