Une tâche aussi simple, dirait-on, et je n'ai pas trouvé de solution satisfaisante. Ce que j'ai essayé (avec de la musique jouée via un haut-parleur connecté Bluetooth pour vraiment connaître l'état de la radio):
- utiliser devcon en tant qu'administrateur:
devcon disable USB\VID_8087&PID_07DC&REV_0001
(qui est l'ID HW de mon adaptateur Bluetooth) ... nécessite un redémarrage pour fonctionner ... - en utilisant powershell en tant qu'administrateur:
Disable-NetAdapter "Bluetooth Network Connection 3"
(qui est la traduction du nom de mon adaptateur Bluetooth) ... cela désactive le pilote PAN, mais un haut-parleur Bluetooth continue de jouer de la musique ... - utiliser net en tant qu'administrateur:
net stop bthserv
... n'éteint pas réellement la radio (le haut-parleur BT continue de jouer de la musique) - en utilisant .NET: La page la plus pertinente sur MSDN ne dit pas un mot sur la mise sous / hors tension de l'adaptateur.
- en utilisant l'explorateur:
ms-settings:bluetooth
ouexplorer.exe %LocalAppData%\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\cs-CZ\AAA_SettingsPagePCSystemBluetooth.settingcontent-ms
... ouvre le panneau des paramètres Bluetooth, mais je dois toujours cliquer sur la bascule
Je ne peux pas croire que Microsoft serait si ignorant de ne pas fournir une telle commande ...
windows
windows-10
command-line
bluetooth
Martin Pecka
la source
la source
Réponses:
C'est difficile en raison de l'interopérabilité nécessaire avec WinRT, mais cela est possible dans PowerShell pur:
Pour l'utiliser, enregistrez-le est un fichier PS1, par exemple
bluetooth.ps1
. Si vous ne l'avez pas déjà fait, suivez les instructions de la section Activation des scripts du wiki de balises PowerShell pour activer l'exécution des scripts sur votre système. Ensuite, vous pouvez l'exécuter à partir d'une invite PowerShell comme celle-ci:Pour désactiver Bluetooth, passez à la
Off
place.Pour l'exécuter à partir d'un fichier batch:
Avertissement: si le service d'assistance Bluetooth n'est pas en cours d'exécution, le script tente de le démarrer car sinon, WinRT ne verra pas les radios Bluetooth. Hélas, le service ne peut pas être démarré si le script ne s'exécute pas en tant qu'administrateur. Pour rendre cela inutile, vous pouvez changer le type de démarrage de ce service en automatique.
Maintenant, pour une explication. Les trois premières lignes établissent les paramètres du script. Avant de commencer sérieusement, nous nous assurons que le service d'assistance Bluetooth est en cours d'exécution et le démarrons sinon. Nous chargeons ensuite l'
System.Runtime.WindowsRuntime
assembly afin de pouvoir utiliser laWindowsRuntimeSystemExtensions.AsTask
méthode pour convertir des tâches de style WinRT (que .NET / PowerShell ne comprend pas) en .NETTask
s. Cette méthode particulière a une cargaison de différents jeux de paramètres qui semblent déclencher la résolution de surcharge de PowerShell, donc dans la ligne suivante, nous obtenons celle spécifique qui ne prend qu'une tâche WinRT résultante. Ensuite, nous définissons une fonction que nous utiliserons plusieurs fois pour extraire un résultat du type approprié d'une tâche WinRT asynchrone. Après la déclaration de cette fonction, nous chargeons deux types nécessaires à partir des métadonnées WinRT. Le reste du script est à peu près juste une traduction PowerShell du code C # que vous avez écrit dans votre réponse; il utilise laRadio
classe WinRT pour rechercher et configurer la radio Bluetooth.la source
$bluetooth
sur null, ce qui provoquera l'erreur de l'avant-dernière ligne.$radios
? Cela affichera la liste des radios que WinRT a renvoyées.rfkill unblock bluetooth
sous Linux :-DAprès avoir abandonné la recherche de solutions toutes faites, j'ai découvert que les applications de la plateforme Windows universelle ont accès à l' API de contrôle radio .
J'ai donc fusionné un exemple d'application de contrôle radio avec une application contrôlée par ligne de commande, et le résultat est ici: https://github.com/peci1/RadioControl . Il est publié sur le Windows Store .
En général, il n'est pas possible de laisser l'application s'exécuter en arrière-plan, vous devez donc d'abord lancer l'interface graphique, puis vous pouvez l'appeler à partir de la ligne de commande comme
Les principales fonctionnalités dont cette application a besoin sont:
Ensuite, vous devez également ajouter la fonction Radios au manifeste de l'application:
Et pour autoriser le contrôle à partir de la ligne de commande, vous devez remplacer la méthode
protected override async void OnActivated(IActivatedEventArgs args)
dans App.xaml.cs et effectuer le traitement dans une branche comme celle-ci:la source
Disable/Enable-NetAdapter
? superuser.com/questions/1444278/…Ce script Autohotkey semble faire l'affaire. Je suis gêné par le
Sleep
là - bas mais il semble que la fenêtre devienne active avant qu'elle ne soit prête à recevoir mes frappes.Crossposted à /programming//q/48700268/308851 pour comprendre avec quoi cela
Sleep 300
pourrait être remplacé.la source
Voici une solution partielle:
wmic path Win32_PNPEntity where "caption like '%bluetooth%' AND DeviceID like 'USB\\%'" call disable
fait certainement disparaître le commutateur Bluetooth On / Off et les rapports du Gestionnaire de périphériquesThis device is disabled. (Code 22)
. Que ce soit suffisant pour tuer la radio, je ne suis pas sûr.Je ne parviens pas à trouver de documentation sur les arguments
call
acceptés. Je pense qu'il devrait y avoir une sorte d'rfkill
ici.la source
enable
ne reprend pas la lecture Bluetooth. La documentation sur la classe PNPEntity est ici: msdn.microsoft.com/en-us/library/aa394353(v=vs.85).aspx , mais aucune autre méthode utile ne semble être là ...Vous pouvez utiliser DevManView pour activer / désactiver un périphérique à partir de la ligne de commande en utilisant cette syntaxe:
Il permet également l'utilisation de caractères génériques avec l'
/use_wildcard
argument.la source
Powershell a des applets de commande pour faire exactement ce que vous cherchez:
https://gallery.technet.microsoft.com/PowerShell-Device-60d73bb0
Utilisez Get-Device pour obtenir une liste des appareils. Vous pouvez diriger cela via where-object pour choisir votre appareil, puis diriger cela vers Disable-Device ou Enable-Device.
Des instructions détaillées...
Téléchargez et décompressez le fichier.
Démarrez un PowerShell en tant qu'administrateur.
Modifiez la politique d'exécution si nécessaire:
Importez le module:
Si vous avez besoin de restreindre la liste des appareils, vous pouvez utiliser une comparaison similaire:
Si vous connaissez le nom exact, vous pouvez utiliser une comparaison -eq (égale):
Essuyez les mains sur le pantalon.
la source
wmic
peut le faire aussi, du moins je le pense.Disable-Device : Error calling SetupDiCallClassInstaller
. Je les exécute en tant qu'administrateur et avec une politique d'exécution sans restriction.J'ai fait un script batch qui vérifie une valeur de clé reg qui ne serait en place que si votre radio Bluetooth était activée. Il appelle ensuite le script powershell de Ben N ci-dessus avec le paramètre correct pour changer son état actuel. Le transforme en raccourci à bascule, plutôt que d'avoir à l'activer et le désactiver séparément.
la source
L'exécution de la commande suivante à partir de l'invite de commandes (en tant qu'administrateur) a fait l'affaire:
J'avais précédemment utilisé la même commande pour désactiver mon adaptateur Wi-Fi et j'ai constaté qu'il fonctionnait également avec les autres adaptateurs dans: Panneau de configuration> Réseau et Internet> Connexions réseau. Remplacez simplement l'argument "nom" par le nom de votre adaptateur. Vous pouvez également l'activer à nouveau en remplaçant le dernier argument par
admin=enabled
.la source