Uma tarefa tão simples, diríamos, e não encontrei uma solução satisfatória. O que eu tentei (com a música tocando em um alto-falante conectado por Bluetooth para realmente saber o estado do rádio):
- usando o devcon como administrador:
devcon disable USB\VID_8087&PID_07DC&REV_0001
(que é o ID HW do meu adaptador Bluetooth) ... requer reinicialização para funcionar ... - usando o powershell como administrador:
Disable-NetAdapter "Bluetooth Network Connection 3"
(que é a tradução do nome do meu adaptador Bluetooth) ... desativa o driver PAN, mas um alto-falante Bluetooth continua tocando música ... - usando net como administrador:
net stop bthserv
... na verdade, não desliga o rádio (o alto-falante BT continua tocando música) - usando o .NET: A página mais relevante no MSDN não diz nada sobre como ligar / desligar o adaptador.
- usando o explorer:
ms-settings:bluetooth
ouexplorer.exe %LocalAppData%\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\cs-CZ\AAA_SettingsPagePCSystemBluetooth.settingcontent-ms
... abre o painel de configurações do Bluetooth, mas ainda preciso clicar no botão de alternância
Não acredito que a Microsoft seria tão ignorante em não fornecer esse comando ...
windows
windows-10
command-line
bluetooth
Martin Pecka
fonte
fonte
Respostas:
Isso é desafiador devido à interoperação necessária com o WinRT, mas é possível no PowerShell puro:
Para usá-lo, salve-o como um arquivo PS1, por exemplo
bluetooth.ps1
. Se você ainda não o fez, siga as instruções na seção Habilitando scripts do wiki de tags do PowerShell para habilitar a execução de scripts no seu sistema. Em seguida, você pode executá-lo em um prompt do PowerShell como este:Para desativar o Bluetooth, passe em seu
Off
lugar.Para executá-lo a partir de um arquivo em lotes:
Advertência: Se o Serviço de Suporte Bluetooth não estiver em execução, o script tentará iniciá-lo porque, caso contrário, o WinRT não verá rádios Bluetooth. Infelizmente, o serviço não pode ser iniciado se o script não estiver sendo executado como administrador. Para tornar isso desnecessário, você pode alterar o tipo de inicialização desse serviço para automático.
Agora, para algumas explicações. As três primeiras linhas estabelecem os parâmetros utilizados pelo script. Antes de começar a sério, garantimos que o Serviço de Suporte Bluetooth esteja em execução e o inicie, se não estiver. Em seguida, carregamos o
System.Runtime.WindowsRuntime
assembly para que possamos usar oWindowsRuntimeSystemExtensions.AsTask
método para converter tarefas no estilo WinRT (que o .NET / PowerShell não entende) em .NETTask
s. Esse método específico possui uma carga de conjuntos de parâmetros diferentes que parecem disparar a resolução de sobrecarga do PowerShell; portanto, na próxima linha, obtemos o específico que executa apenas uma tarefa do WinRT resultante. Em seguida, definimos uma função que usaremos várias vezes para extrair um resultado do tipo apropriado de uma tarefa assíncrona do WinRT. Após a declaração dessa função, carregamos dois tipos necessários dos metadados do WinRT. O restante do script é basicamente uma tradução do código C # que você escreveu na resposta do PowerShell; ele usa aRadio
classe WinRT para encontrar e configurar o rádio Bluetooth.fonte
$bluetooth
como nula, o que fará com que a penúltima linha produza esse erro.$radios
? Isso mostrará a lista de rádios que o WinRT retornou.rfkill unblock bluetooth
Linux :-DDepois de desistir de procurar soluções prontas, descobri que os aplicativos da Plataforma Universal do Windows têm acesso à API de controle de rádio .
Então, mesclei um aplicativo de controle de rádio de amostra com um aplicativo controlado por linha de comando e o resultado está aqui: https://github.com/peci1/RadioControl . É publicado na Windows Store .
Em geral, não é possível deixar o aplicativo ser executado em segundo plano, portanto, é necessário iniciar a GUI primeiro e, em seguida, chamá-lo na linha de comando, como
Os principais recursos que este aplicativo precisa são:
Em seguida, você também precisa adicionar o recurso Rádios ao manifesto do aplicativo:
E para permitir o controle da linha de comando, você precisa substituir o método
protected override async void OnActivated(IActivatedEventArgs args)
no App.xaml.cs e fazer o processamento em uma ramificação como esta:fonte
Disable/Enable-NetAdapter
? superuser.com/questions/1444278/…Esse script de Autohotkey parece fazer o truque. Estou incomodado com o que está
Sleep
lá, mas parece que a janela fica ativa antes de estar pronta para receber minhas teclas.Transposto para /programming//q/48700268/308851 para descobrir com o que isso
Sleep 300
poderia ser substituído.fonte
Aqui está uma solução parcial:
wmic path Win32_PNPEntity where "caption like '%bluetooth%' AND DeviceID like 'USB\\%'" call disable
certamente faz com que a chave liga / desliga do Bluetooth desapareça e o Gerenciador de dispositivos reporteThis device is disabled. (Code 22)
. Se isso é suficiente para matar o rádio, não tenho certeza.Não consigo encontrar documentação sobre quais argumentos
call
aceitam. Eu acho que deveria haver algum tipo derfkill
aqui.fonte
enable
não retoma a reprodução do Bluetooth. A documentação da classe PNPEntity está aqui: msdn.microsoft.com/en-us/library/aa394353(v=vs.85).aspx , mas nenhum outro método útil parece estar lá ...Você pode usar o DevManView para ativar / desativar um dispositivo na linha de comando usando esta sintaxe:
Também permite o uso de curingas com o
/use_wildcard
argumentofonte
O Powershell possui cmdlets para fazer exatamente o que você está procurando:
https://gallery.technet.microsoft.com/PowerShell-Device-60d73bb0
Use Get-Device para obter uma lista dos dispositivos. Você pode canalizar isso através do objeto where para selecionar seu dispositivo e, em seguida, canalizar para Disable-Device ou Enable-Device.
Instruções detalhadas...
Baixe e descompacte o arquivo.
Inicie um PowerShell como administrador.
Altere a política de execução, se necessário:
Importe o módulo:
Se você precisar restringir a lista de dispositivos, poderá usar uma comparação semelhante:
Se você souber o nome exato, poderá usar uma comparação -eq (igual):
Limpe as mãos nas calças.
fonte
wmic
pode fazer isso também, pelo menos acho que sim.Disable-Device : Error calling SetupDiCallClassInstaller
. Eu os executo como administrador e com política de execução irrestrita.Criei um script em lote que verifica um valor de chave reg que só estaria em vigor se o seu rádio bluetooth estivesse ativado. Em seguida, chama o script powershell de Ben N acima com o parâmetro correto para mudar seu estado atual. Transforma em um atalho de alternância, em vez de precisar ativar e desativar separadamente.
fonte
A execução do seguinte comando no prompt de comando (como administrador) fez o truque:
Eu já havia usado o mesmo comando para desativar meu adaptador Wi-Fi e descobri que ele também funcionava com os outros adaptadores em: Painel de controle> Rede e Internet> Conexões de rede. Apenas mude o argumento "name" para o nome do seu adaptador. Você também pode habilitá-lo novamente alterando o último argumento para
admin=enabled
.fonte