
Ich möchte den Vorgang 1) Öffnen des Action Centers und 2) Klicken auf das Bluetooth-Symbol mit einer Verknüpfung emulieren.
Meine Lösung bestand darin, AHK zu verwenden, um eine Tastenkombination zum Ausführen einer .bat-Datei zuzuordnen, die das in diesem Artikel vorgeschlagene Skript enthält.Frage.
Aber der vorgeschlagene Dienst aktiviert/entfernt nicht das magische kleine blaue Bluetooth-Symbol in der Taskleiste.Bildbeschreibung hier eingeben
Ich habe nach allen Bluetooth-Diensten gesucht, die aktiviert werden, wenn ich im Info-Center auf das Bluetooth-Symbol klicke, und ich habe sie über die vorgeschlagene Methode aktiviert .bat
, aber es funktioniert immer noch nicht.
BluetoothUserService_182d916
bthserv
BthHFSrv
BthHFEnum
BthEnum
BthHFAud
BthEnum
BthA2dp
Microsoft_Bluetooth_AvrcpTransport
Hier alle Leistungen im Überblick:
Mein Skript (in dem ich Microsoft_Bluetooth_AvrcpTransport durch alle oben genannten Dienste ersetzt habe):
@echo off
for /F "tokens=3 delims=: " %%H in ('sc query "Microsoft_Bluetooth_AvrcpTransport" ^| findstr "STATE"') do (
if /I "%%H" NEQ "RUNNING" (
net start "Microsoft_Bluetooth_AvrcpTransport"
) else if /I "%%H" NEQ "STOPPED" (
net stop "Microsoft_Bluetooth_AvrcpTransport"
)
)
@pause
Antwort1
Erstellen Sie zunächst eine.ahkVerknüpfung, die eine Powershell startet:
#b::
Run, C:\Users\user\Desktop\bluetooth.ps1,,Hide
return
Anschließend erstellt man eine Powershell:
If ((Get-Service bthserv).Status -eq 'Stopped') { Start-Service bthserv }
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
$asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
$netTask = $asTask.Invoke($null, @($WinRtTask))
$netTask.Wait(-1) | Out-Null
$netTask.Result
}
[Windows.Devices.Radios.Radio,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
[Windows.Devices.Radios.RadioAccessStatus,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
Await ([Windows.Devices.Radios.Radio]::RequestAccessAsync()) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null
$radios = Await ([Windows.Devices.Radios.Radio]::GetRadiosAsync()) ([System.Collections.Generic.IReadOnlyList[Windows.Devices.Radios.Radio]])
$bluetooth = $radios | ? { $_.Kind -eq 'Bluetooth' }
[Windows.Devices.Radios.RadioState,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
if ($bluetooth.state -eq 'On') {$BluetoothStatus = 'Off'} else {$BluetoothStatus = 'On'}
Await ($bluetooth.SetStateAsync($BluetoothStatus)) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null
Der ganze Verdienst gebührt@Ben NUnd@Scott Heath
Dieses Skript funktioniert, wenn ich es von VScode aus starte, wenn ich es in eine Powershell kopiere und einfüge oder wenn ich es mit cmd starte. Aber nicht, wenn ich darauf doppelklicke oder wenn ich es in starte . Die Lösung bestand darin, eine Datei mit folgendem .ahk
zu erstellen:.bat
Run, C:\Users\user\Desktop\bluetooth.ps1,,Hide
Und rufen Sie dies dann .bat
in ahk auf.
Antwort2
AutoHotkey v2.0 führt eine neue Syntax ein, die Anweisungen durch Funktionen ersetzt, sodass die akzeptierte Antwort keine Copy-and-Paste-Lösung mehr ist.
Um dies mit AutoHotkey v2.0 unter Windows 10.0.19045 durchzuführen, musste ich Folgendes erstellen:
- Umschalten von Bluetooth.ahk
#b::
{
Run( 'C:\Users\<user>\Documents\AutoHotkey\toggle-bluetooth.bat', , 'Hide' )
return
}
(Die Signatur #b::
weist dieser Funktion den Hotkey Win+B zu. Siehe dieAHK-Dokumentefür Einzelheiten zur Notation.)
- toggle-bluetooth.bat
powershell.exe -ExecutionPolicy Bypass -File toggle-bluetooth.ps1
- Umschalten von Bluetooth.ps1
If ((Get-Service bthserv).Status -eq 'Stopped') { Start-Service bthserv }
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
$asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
$netTask = $asTask.Invoke($null, @($WinRtTask))
$netTask.Wait(-1) | Out-Null
$netTask.Result
}
[Windows.Devices.Radios.Radio,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
[Windows.Devices.Radios.RadioAccessStatus,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
Await ([Windows.Devices.Radios.Radio]::RequestAccessAsync()) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null
$radios = Await ([Windows.Devices.Radios.Radio]::GetRadiosAsync()) ([System.Collections.Generic.IReadOnlyList[Windows.Devices.Radios.Radio]])
$bluetooth = $radios | ? { $_.Kind -eq 'Bluetooth' }
[Windows.Devices.Radios.RadioState,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
if ($bluetooth.state -eq 'On') {$BluetoothStatus = 'Off'} else {$BluetoothStatus = 'On'}
Await ($bluetooth.SetStateAsync($BluetoothStatus)) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null
Es ist durchaus möglich, dass die Verwendung .bat
als Mittelsmann bei einem anderen Ansatz nicht erforderlich ist. Aber das ist das Einzige, was ich zum Laufen bringen konnte.
Natürlicher Dank geht an @MagTun und @rokdd für die Entwicklung dieser Lösung.
Antwort3
Sie müssen diese Dienste nicht stoppen/starten, um das Bluetooth-Traybar-Symbol zu entfernen.
Die Anzeige des Symbols wird im Registrierungsschlüssel
HKEY_CURRENT_USER\Control Panel\Bluetooth
durch den DWORD-Wert gesteuert,
Notification Area Icon
dessen Werte 0
für Aus und 1
für Ein stehen. Damit dies wirksam wird, muss der Explorer neu gestartet werden.
Die folgenden beiden .bat
Dateien erledigen diese Aufgabe.
Deaktivieren des Bluetooth-Benachrichtigungsbereichssymbols
REG ADD "HKCU\Control Panel\Bluetooth" /V "Notification Area Icon" /T REG_DWORD /D 00000000 /F
taskkill /f /im explorer.exe
start explorer.exe
Aktivieren Sie das Bluetooth-Benachrichtigungsbereichssymbol
REG ADD "HKCU\Control Panel\Bluetooth" /V "Notification Area Icon" /T REG_DWORD /D 00000001 /F
taskkill /f /im explorer.exe
start explorer.exe