Tugas yang sangat sederhana, bisa dikatakan, dan saya belum menemukan solusi yang memuaskan. Apa yang saya coba (dengan musik diputar melalui speaker yang terhubung Bluetooth untuk benar-benar mengetahui keadaan radio):
- menggunakan devcon sebagai admin:
devcon disable USB\VID_8087&PID_07DC&REV_0001
(yang merupakan HW ID adaptor Bluetooth saya) ... memerlukan reboot untuk berfungsi ... - menggunakan powershell sebagai admin:
Disable-NetAdapter "Bluetooth Network Connection 3"
(yang merupakan terjemahan dari nama adaptor Bluetooth saya) ... itu menonaktifkan driver PAN, tetapi speaker Bluetooth terus memutar musik ... - menggunakan internet sebagai admin:
net stop bthserv
... sebenarnya tidak mematikan radio (speaker BT terus memutar musik) - menggunakan .NET: Halaman paling relevan di MSDN tidak mengatakan sepatah kata pun tentang menghidupkan / mematikan adaptor.
- menggunakan explorer:
ms-settings:bluetooth
atauexplorer.exe %LocalAppData%\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\cs-CZ\AAA_SettingsPagePCSystemBluetooth.settingcontent-ms
... membuka panel pengaturan Bluetooth, tetapi saya masih harus mengklik sakelar
Saya tidak percaya Microsoft akan begitu bodoh untuk tidak memberikan perintah seperti itu ...
windows
windows-10
command-line
bluetooth
Martin Pecka
sumber
sumber
Jawaban:
Ini menantang karena interoperasi yang diperlukan dengan WinRT, tetapi dimungkinkan dalam PowerShell murni:
Untuk menggunakannya, simpan itu file PS1, mis
bluetooth.ps1
. Jika Anda belum melakukannya, ikuti instruksi di bagian Skrip yang Mengaktifkan wiki tag PowerShell untuk mengaktifkan eksekusi skrip di sistem Anda. Kemudian Anda dapat menjalankannya dari prompt PowerShell seperti ini:Untuk mematikan Bluetooth, lewati
Off
saja.Untuk menjalankannya dari file batch:
Peringatan: Jika Layanan Dukungan Bluetooth tidak berjalan, skrip mencoba untuk memulainya karena jika tidak, WinRT tidak akan melihat radio Bluetooth. Sayangnya, layanan tidak dapat dimulai jika skrip tidak berjalan sebagai administrator. Untuk membuatnya tidak perlu, Anda dapat mengubah jenis startup layanan itu menjadi otomatis.
Sekarang untuk penjelasan. Tiga baris pertama menetapkan parameter yang diambil skrip. Sebelum memulai dengan sungguh-sungguh, kami memastikan Layanan Dukungan Bluetooth berjalan dan memulainya jika tidak. Kami kemudian memuat
System.Runtime.WindowsRuntime
perakitan sehingga kami dapat menggunakanWindowsRuntimeSystemExtensions.AsTask
metode untuk mengkonversi tugas-tugas gaya WinRT (yang .NET / PowerShell tidak mengerti) ke .NETTask
s. Metode khusus itu memiliki muatan set parameter yang berbeda yang tampaknya meningkatkan resolusi kelebihan PowerShell, jadi pada baris berikutnya kita mendapatkan yang spesifik yang hanya mengambil tugas WinRT yang dihasilkan. Kemudian kita mendefinisikan fungsi yang akan kita gunakan beberapa kali untuk mengekstrak hasil dari tipe yang sesuai dari tugas WinRT yang tidak sinkron. Setelah deklarasi fungsi itu, kami memuat dua jenis yang diperlukan dari metadata WinRT. Sisa skrip cukup banyak hanya terjemahan PowerShell dari kode C # yang Anda tulis dalam jawaban Anda; menggunakanRadio
kelas WinRT untuk menemukan dan mengkonfigurasi radio Bluetooth.sumber
$bluetooth
ke nol, yang akan menyebabkan saluran kedua ke terakhir menghasilkan kesalahan itu.$radios
? Itu akan menampilkan daftar radio yang dikembalikan oleh WinRT.rfkill unblock bluetooth
di Linux :-DSetelah menyerah untuk mencari solusi yang sudah jadi, saya menemukan bahwa aplikasi Universal Windows Platform memiliki akses ke API kontrol radio .
Jadi saya menggabungkan sampel aplikasi kontrol radio dengan aplikasi yang dikontrol commandline, dan hasilnya ada di sini: https://github.com/peci1/RadioControl . Ini diterbitkan di Windows Store .
Secara umum, tidak mungkin membiarkan aplikasi berjalan di latar belakang, jadi Anda harus meluncurkan GUI terlebih dahulu, dan kemudian Anda dapat memanggilnya dari commandline seperti
Fitur inti yang dibutuhkan aplikasi ini adalah:
Maka Anda juga perlu menambahkan kemampuan Radio ke manifes aplikasi:
Dan untuk memungkinkan kontrol dari commandline, Anda perlu mengganti metode
protected override async void OnActivated(IActivatedEventArgs args)
di App.xaml.cs dan melakukan pemrosesan dalam cabang seperti ini:sumber
Disable/Enable-NetAdapter
? superuser.com/questions/1444278/…Script Autohotkey ini sepertinya melakukan triknya. Saya terganggu oleh
Sleep
sana tetapi tampaknya jendela menjadi aktif sebelum siap menerima penekanan tombol saya.Crossposted ke /programming//q/48700268/308851 untuk mencari tahu apa yang
Sleep 300
bisa diganti dengan.sumber
Ini solusi parsial:
wmic path Win32_PNPEntity where "caption like '%bluetooth%' AND DeviceID like 'USB\\%'" call disable
tentu saja membuat sakelar Nyala / Mati Bluetooth menghilang dan Pengelola Perangkat melaporkanThis device is disabled. (Code 22)
. Apakah itu cukup untuk mematikan radionya, saya tidak yakin.Saya tidak dapat menemukan dokumentasi tentang argumen yang
call
diterima. Saya pikir harus ada semacam dirfkill
sini.sumber
enable
tidak melanjutkan pemutaran Bluetooth. Dokumentasi tentang kelas PNPEntity ada di sini: msdn.microsoft.com/en-us/library/aa394353(v=vs.85).aspx , tetapi tampaknya tidak ada metode lain yang bermanfaat di sana ...Anda dapat menggunakan DevManView untuk mengaktifkan / menonaktifkan perangkat dari baris perintah menggunakan sintaks ini:
Ini juga memungkinkan penggunaan wildcard dengan
/use_wildcard
argumen.sumber
Powershell memiliki cmdlet untuk melakukan persis apa yang Anda cari:
https://gallery.technet.microsoft.com/PowerShell-Device-60d73bb0
Gunakan Get-Device untuk mendapatkan daftar perangkat. Anda dapat menyalurkan melalui mana-objek untuk memilih perangkat Anda dan kemudian pipa itu ke Disable-Device atau Enable-Device.
Petunjuk Lengkap ...
Unduh dan unzip file tersebut.
Mulai PowerShell sebagai admin.
Ubah kebijakan eksekusi jika perlu:
Impor modul:
Jika Anda perlu mempersempit daftar perangkat Anda dapat menggunakan -seperti perbandingan:
Jika Anda tahu nama persisnya, Anda bisa menggunakan -eq (sama dengan) dibandingkan:
Usap tangan dengan celana.
sumber
wmic
dapat melakukan ini juga, setidaknya saya pikir begitu.Disable-Device : Error calling SetupDiCallClassInstaller
. Saya menjalankannya sebagai admin dan dengan kebijakan eksekusi tidak terbatas.Saya membuat skrip batch yang memeriksa nilai kunci reg yang hanya akan ada jika radio bluetooth Anda diaktifkan. Ia kemudian memanggil skrip powershell Ben N di atas dengan parameter yang benar untuk beralih ke kondisi saat ini. Mengubahnya menjadi pintasan toggle, daripada harus menggunakan dan mematikan secara terpisah.
sumber
Menjalankan perintah berikut dari Command Prompt (sebagai administrator) melakukan trik:
Saya sebelumnya telah menggunakan perintah yang sama untuk menonaktifkan adaptor Wi-Fi saya, dan menemukan bahwa itu juga bekerja dengan adaptor lain di: Control Panel> Network dan Internet> Network Connections. Ubah saja argumen "nama" menjadi nama adaptor Anda. Anda juga dapat mengaktifkannya kembali dengan mengubah argumen terakhir menjadi
admin=enabled
.sumber