diff --git a/README.md b/README.md index 704a3bf6..da170ff7 100644 --- a/README.md +++ b/README.md @@ -24,15 +24,15 @@ There are two options to approach this: Currently the recommended option is the "patch it over". HASS.Agent is capable of functioning without the installer but the installer takes care of some dependencies that might need to be installed manually otherwise.
-1. Download and install HASS.Agent from [the official release](https://github.com/LAB02-Research/HASS.Agent/releases) (usually in **"C:\Users\\AppData\Roaming\LAB02 Research\HASS.Agent\"**) +1. Download and install HASS.Agent from [the official release](https://github.com/LAB02-Research/HASS.Agent/releases) (usually in **"C:\Users\\AppData\Roaming\LAB02 Research\HASS.Agent\"** and **"C:\Program Files (x86)\LAB02 Research\HASS.Agent Satellite Service"**) 2. Download and install WindowsAppSDK ([explanation why](https://github.com/LAB02-Research/HASS.Agent.Staging/pull/18)) -for HASS.Agent 2023.10.0 - https://aka.ms/windowsappsdk/1.3/1.3.230724000/windowsappruntimeinstall-x64.exe +
for HASS.Agent 2023.10.0, 2023.11.0 and 2023.11.1 - https://aka.ms/windowsappsdk/1.3/1.3.230724000/windowsappruntimeinstall-x64.exe 3. Make sure the HASS.Agent service is stopped
4. Close/Exit out of the HASS.Agent
-5. Download the release package from this repository -6. Copy/Replace the downloaded files over the installed ones (again, usually in **"C:\Users\\AppData\Roaming\LAB02 Research\HASS.Agent\"**) +5. Download the release package (HASS.Agent & HASS.Agent.Service) from this repository +6. Copy/Replace the downloaded files over the installed ones (again, usually in **"C:\Users\\AppData\Roaming\LAB02 Research\HASS.Agent\"** and **"C:\Program Files (x86)\LAB02 Research\HASS.Agent Satellite Service\"**) 7. Launch HASS.Agent and verify that you're using the unofficial beta version by navigating to help window - "u" in the version postfix @@ -77,7 +77,7 @@ This project contains the latest code of all three parts of the HASS.Agent platf
-Note: it's best to have `enable extended logging` enabled, which will also reflect on the satellite service (as long as it's started in console mode instead of service mode). But that'll also generate false positives, so primarily focus on the issue at hand. +Note: when reporting issues it's best to have `enable extended logging` enabled. ---- diff --git a/src/HASS.Agent.Staging/HASS.Agent/Forms/Commands/CommandsMod.cs b/src/HASS.Agent.Staging/HASS.Agent/Forms/Commands/CommandsMod.cs index 03b49886..3b8a04b6 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Forms/Commands/CommandsMod.cs +++ b/src/HASS.Agent.Staging/HASS.Agent/Forms/Commands/CommandsMod.cs @@ -488,6 +488,15 @@ private void BtnStore_Click(object sender, EventArgs e) Command.Command = selectedItem.Key; } break; + + case CommandType.SwitchDesktopCommand: + if (!VirtualDesktopManager.Initialized) + { + MessageBoxAdv.Show(this, Languages.CommandsMod_BtnStore_VirtualDesktop_Unavailable, Variables.MessageBoxTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); + ActiveControl = TbSetting; + return; + } + break; } Command.RunAsLowIntegrity = CbRunAsLowIntegrity.CheckState == CheckState.Checked; diff --git a/src/HASS.Agent.Staging/HASS.Agent/Forms/Main.cs b/src/HASS.Agent.Staging/HASS.Agent/Forms/Main.cs index bf26ee43..368825f4 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Forms/Main.cs +++ b/src/HASS.Agent.Staging/HASS.Agent/Forms/Main.cs @@ -317,7 +317,7 @@ private void HotkeyListener_HotkeyPressed(object sender, HotkeyEventArgs e) /// private void InitializeVirtualDesktopManager() { - VirtualDesktop.Configure(); + VirtualDesktopManager.Initialize(); } /// diff --git a/src/HASS.Agent.Staging/HASS.Agent/Forms/Sensors/SensorsMod.cs b/src/HASS.Agent.Staging/HASS.Agent/Forms/Sensors/SensorsMod.cs index 34ccf9bc..6ae193b0 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Forms/Sensors/SensorsMod.cs +++ b/src/HASS.Agent.Staging/HASS.Agent/Forms/Sensors/SensorsMod.cs @@ -12,6 +12,7 @@ using HASS.Agent.Shared.Functions; using HASS.Agent.Shared.HomeAssistant.Sensors.GeneralSensors.SingleValue; using HASS.Agent.Managers.DeviceSensors; +using HASS.Agent.Managers; namespace HASS.Agent.Forms.Sensors { @@ -789,7 +790,16 @@ private void BtnStore_Click(object sender, EventArgs e) } Sensor.Query = windowprocess; break; - } + + case SensorType.ActiveDesktopSensor: + if (!VirtualDesktopManager.Initialized) + { + MessageBoxAdv.Show(this, Languages.CommandsMod_BtnStore_VirtualDesktop_Unavailable, Variables.MessageBoxTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); + ActiveControl = TbSetting1; + return; + } + break; + } // set values Sensor.Type = sensorCard.SensorType; diff --git a/src/HASS.Agent.Staging/HASS.Agent/Functions/CompatHelper.cs b/src/HASS.Agent.Staging/HASS.Agent/Functions/CompatHelper.cs index 7e80ca3d..dd01bc96 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Functions/CompatHelper.cs +++ b/src/HASS.Agent.Staging/HASS.Agent/Functions/CompatHelper.cs @@ -9,31 +9,57 @@ namespace HASS.Agent.Functions { internal static class CompatHelper { - internal static (int, int, int) SplitHAVerion(string haVersion) + private static (int, int, int) SplitHAVerion(string haVersion) { var splitVersion = haVersion.Split('.'); - _ = int.TryParse(splitVersion[0], out int major); - _ = int.TryParse(splitVersion[1], out int minor); + var major = 0; + if (splitVersion.Length > 0) + { + _ = int.TryParse(splitVersion[0], out major); + } - int patch = 0; + var minor = 0; + if (splitVersion.Length > 1) + { + _ = int.TryParse(splitVersion[1], out minor); + } + + var patch = 0; if (splitVersion.Length > 2) + { _ = int.TryParse(splitVersion[2], out patch); + } return (major, minor, patch); } + /// + /// Function checks if the Home Assistant connected to HASS.Agent is greater or equal to . + /// + /// + /// + /// True if version is greater or equal from . + /// False if version is lower of there is no connection to Home Assistant instance or it's version cannot be determined. + /// internal static bool HassVersionEqualOrOver(string haVersion) { - if (haVersion == null) + if (string.IsNullOrWhiteSpace(haVersion) || string.IsNullOrWhiteSpace(HassApiManager.HaVersion)) + { return false; + } var (targetMajor, targetMinor, targetPatch) = SplitHAVerion(haVersion); var (major, minor, patch) = SplitHAVerion(HassApiManager.HaVersion); + if(major == 0) + { + return false; + } + return major > targetMajor || major == targetMajor && minor > targetMinor - || major == targetMajor && minor == targetMinor && patch > targetPatch; + || major == targetMajor && minor == targetMinor && patch >= targetPatch; } } } diff --git a/src/HASS.Agent.Staging/HASS.Agent/HASS.Agent.csproj b/src/HASS.Agent.Staging/HASS.Agent/HASS.Agent.csproj index 2528b0bf..8dc2c74f 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/HASS.Agent.csproj +++ b/src/HASS.Agent.Staging/HASS.Agent/HASS.Agent.csproj @@ -12,7 +12,7 @@ x64 AnyCPU;x64 full - 2023.11.0-ubeta1 + 2023.11.1-ubeta LAB02 Research LAB02 Research Windows-based client for Home Assistant. Provides notifications, quick actions, commands, sensors and more. @@ -22,8 +22,8 @@ https://github.com/LAB02-Research/HASS.Agent MIT app.manifest - 2022.15.0 - 2022.15.0 + 2023.11.1 + 2023.11.1 HASS.Agent None win10-x64;win10-x86;win10-arm64 @@ -65,12 +65,12 @@ + - diff --git a/src/HASS.Agent.Staging/HASS.Agent/HomeAssistant/Commands/CustomCommands/SwitchDesktopCommand.cs b/src/HASS.Agent.Staging/HASS.Agent/HomeAssistant/Commands/CustomCommands/SwitchDesktopCommand.cs index 5d2bda2d..51ef272c 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/HomeAssistant/Commands/CustomCommands/SwitchDesktopCommand.cs +++ b/src/HASS.Agent.Staging/HASS.Agent/HomeAssistant/Commands/CustomCommands/SwitchDesktopCommand.cs @@ -1,92 +1,71 @@ using System; using System.Diagnostics; using System.IO; +using HASS.Agent.Managers; using HASS.Agent.Shared.Enums; using HASS.Agent.Shared.Managers; using Serilog; using WindowsDesktop; -namespace HASS.Agent.Shared.HomeAssistant.Commands.InternalCommands +namespace HASS.Agent.Shared.HomeAssistant.Commands.InternalCommands; + +/// +/// Activates provided Virtual Desktop +/// +public class SwitchDesktopCommand : InternalCommand { - /// - /// Activates provided Virtual Desktop - /// - public class SwitchDesktopCommand : InternalCommand + private const string DefaultName = "switchdesktop"; + + public SwitchDesktopCommand(string name = DefaultName, string friendlyName = DefaultName, string desktopId = "", CommandEntityType entityType = CommandEntityType.Switch, string id = default) : base(name ?? DefaultName, friendlyName ?? null, desktopId, entityType, id) + { + CommandConfig = desktopId; + State = "OFF"; + } + + public override void TurnOn() { - private const string DefaultName = "switchdesktop"; + State = "ON"; - public SwitchDesktopCommand(string name = DefaultName, string friendlyName = DefaultName, string desktopId = "", CommandEntityType entityType = CommandEntityType.Switch, string id = default) : base(name ?? DefaultName, friendlyName ?? null, desktopId, entityType, id) + if (string.IsNullOrWhiteSpace(CommandConfig)) { - CommandConfig = desktopId; + Log.Warning("[SWITCHDESKTOP] [{name}] Unable to launch command, it's configured as action-only", Name); + State = "OFF"; + return; } - public override void TurnOn() - { - State = "ON"; + ActivateVirtualDesktop(CommandConfig); - if (string.IsNullOrWhiteSpace(CommandConfig)) - { - Log.Warning("[SWITCHDESKTOP] [{name}] Unable to launch command, it's configured as action-only", Name); + State = "OFF"; + } - State = "OFF"; - return; - } + public override void TurnOnWithAction(string action) + { + State = "ON"; - ActivateVirtualDesktop(CommandConfig); + if (string.IsNullOrWhiteSpace(action)) + { + Log.Warning("[SWITCHDESKTOP] [{name}] Unable to launch command, empty action provided", Name); State = "OFF"; + return; } - public override void TurnOnWithAction(string action) + if (!string.IsNullOrWhiteSpace(CommandConfig)) { - State = "ON"; - - if (string.IsNullOrWhiteSpace(action)) - { - Log.Warning("[SWITCHDESKTOP] [{name}] Unable to launch command, empty action provided", Name); - - State = "OFF"; - return; - } - - if (!string.IsNullOrWhiteSpace(CommandConfig)) - { - Log.Warning("[SWITCHDESKTOP] [{name}] Command launched by action, command-provided process will be ignored", Name); - - State = "OFF"; - return; - } - - ActivateVirtualDesktop(action); + Log.Warning("[SWITCHDESKTOP] [{name}] Command launched by action, command-provided process will be ignored", Name); State = "OFF"; + return; } - private void ActivateVirtualDesktop(string virtualDesktopId) - { - var targetDesktopGuid = Guid.Empty; - var parsed = Guid.TryParse(virtualDesktopId, out targetDesktopGuid); - if (!parsed) - { - Log.Warning("[SWITCHDESKTOP] [{name}] Unable to parse virtual desktop id: {virtualDesktopId}", Name, virtualDesktopId); - return; - } - - var targetDesktop = VirtualDesktop.GetDesktops().FirstOrDefault(d => d.Id == targetDesktopGuid); - if (targetDesktop == null) - { - Log.Warning("[SWITCHDESKTOP] [{name}] Unable to find virtual desktop with id: {virtualDesktopId}", Name, virtualDesktopId); - return; - } - - if (VirtualDesktop.Current == targetDesktop) - { - Log.Information("[SWITCHDESKTOP] [{name}] Target virtual desktop '{virtualDesktopId}' is already active", Name, virtualDesktopId); - return; - } - - targetDesktop.Switch(); - } + ActivateVirtualDesktop(action); + + State = "OFF"; + } + + private void ActivateVirtualDesktop(string virtualDesktopId) + { + VirtualDesktopManager.ActivateDesktop(virtualDesktopId); } } diff --git a/src/HASS.Agent.Staging/HASS.Agent/HomeAssistant/Sensors/GeneralSensors/SingleValue/ActiveDesktopSensor.cs b/src/HASS.Agent.Staging/HASS.Agent/HomeAssistant/Sensors/GeneralSensors/SingleValue/ActiveDesktopSensor.cs index edaf461e..41bc7404 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/HomeAssistant/Sensors/GeneralSensors/SingleValue/ActiveDesktopSensor.cs +++ b/src/HASS.Agent.Staging/HASS.Agent/HomeAssistant/Sensors/GeneralSensors/SingleValue/ActiveDesktopSensor.cs @@ -3,6 +3,7 @@ using System.Text; using System.Windows.Forms; using System.Windows.Threading; +using HASS.Agent.Managers; using HASS.Agent.Resources.Localization; using HASS.Agent.Shared.Models.HomeAssistant; using Microsoft.Win32; @@ -20,8 +21,9 @@ namespace HASS.Agent.Shared.HomeAssistant.Sensors.GeneralSensors.SingleValue public class ActiveDesktopSensor : AbstractSingleValueSensor { private const string _defaultName = "activedesktop"; - + private string _desktopId = string.Empty; + private string _desktopName = string.Empty; private string _attributes = string.Empty; public ActiveDesktopSensor(int? updateInterval = null, string name = _defaultName, string friendlyName = _defaultName, string id = default) : base(name ?? _defaultName, friendlyName ?? null, updateInterval ?? 15, id) @@ -31,10 +33,16 @@ public ActiveDesktopSensor(int? updateInterval = null, string name = _defaultNam public override DiscoveryConfigModel GetAutoDiscoveryConfig() { - if (Variables.MqttManager == null) return null; + if (Variables.MqttManager == null) + { + return null; + } var deviceConfig = Variables.MqttManager.GetDeviceConfigModel(); - if (deviceConfig == null) return null; + if (deviceConfig == null) + { + return null; + } return AutoDiscoveryConfigModel ?? SetAutoDiscoveryConfigModel(new SensorDiscoveryConfigModel() { @@ -51,31 +59,19 @@ public override DiscoveryConfigModel GetAutoDiscoveryConfig() public override string GetState() { - var currentDesktop = VirtualDesktop.Current; - _desktopId = currentDesktop.Id.ToString(); - - var desktops = new Dictionary(); - foreach (var desktop in VirtualDesktop.GetDesktops()) - { - var id = desktop.Id.ToString(); - desktops[id] = string.IsNullOrWhiteSpace(desktop.Name) ? GetDesktopNameFromRegistry(id) : desktop.Name; - } + var currentDesktop = VirtualDesktopManager.GetCurrentDesktop(); + _desktopId = currentDesktop == null ? string.Empty : currentDesktop.Id.ToString(); + _desktopName = currentDesktop == null ? string.Empty : currentDesktop.Name; _attributes = JsonConvert.SerializeObject(new { - desktopName = currentDesktop.Name, - availableDesktops = desktops + desktopName = _desktopName, + availableDesktops = VirtualDesktopManager.GetAllDesktopsInfo() }, Formatting.Indented); return _desktopId; } public override string GetAttributes() => _attributes; - - private string GetDesktopNameFromRegistry(string id) - { - var registryPath = $"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VirtualDesktops\\Desktops\\{{{id}}}"; - return (Registry.GetValue(registryPath, "Name", string.Empty) as string) ?? string.Empty; - } } } diff --git a/src/HASS.Agent.Staging/HASS.Agent/Managers/VirtualDesktopManager.cs b/src/HASS.Agent.Staging/HASS.Agent/Managers/VirtualDesktopManager.cs new file mode 100644 index 00000000..b68c0016 --- /dev/null +++ b/src/HASS.Agent.Staging/HASS.Agent/Managers/VirtualDesktopManager.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; +using Microsoft.Win32; +using Serilog; +using WindowsDesktop; + +namespace HASS.Agent.Managers; + +//Note(Amadeo): due to poor m$ decisions on availability of the Virtual Desktop management APIs, there is no good way to manage Virtual Desktops with publicly available ones. +//We need to rely on on Community made ones which can stop working with new Windows version due to changes in the COM object name changes. +//This means it's required to limit the functionality on systems not to expose users to runtime application errors. +internal static class VirtualDesktopManager +{ + public static bool Initialized { get; private set; } = false; + + internal static bool Initialize() + { + try + { + VirtualDesktop.Configure(); + Initialized = true; + Log.Information("[VIRTDESKT] Virtual Desktop Manager initialized"); + } + catch + { + Initialized = false; + Log.Error("[VIRTDESKT] Error initializing Virtual Desktop Manager, your Windows version may be unsupported"); //TODO(Amadeo): add link to documentation explaining the issue. + } + + return Initialized; + } + + internal static void ActivateDesktop(string virtualDesktopId) + { + if (!Initialized) + { + Log.Warning("[VIRTDESKT] Cannot activate virtual desktop, manager not initialized"); + } + + Guid targetDesktopGuid; + var parsed = Guid.TryParse(virtualDesktopId, out targetDesktopGuid); + if (!parsed) + { + Log.Warning("[VIRTDESKT] Unable to parse virtual desktop id: {virtualDesktopId}", virtualDesktopId); + return; + } + + ActivateDesktop(targetDesktopGuid); + } + + internal static void ActivateDesktop(Guid virtualDesktopGuid) + { + if (!Initialized) + { + Log.Warning("[VIRTDESKT] Cannot activate virtual desktop, manager not initialized"); + } + + try + { + var targetDesktop = VirtualDesktop.GetDesktops().FirstOrDefault(d => d.Id == virtualDesktopGuid); + if (targetDesktop == null) + { + Log.Warning("[VIRTDESKT] Unable to find virtual desktop with id: {virtualDesktopId}", virtualDesktopGuid.ToString()); + return; + } + + if (VirtualDesktop.Current == targetDesktop) + { + Log.Information("[VIRTDESKT] Target virtual desktop '{virtualDesktopId}' is already active", virtualDesktopGuid.ToString()); + return; + } + + targetDesktop.Switch(); + } + catch (Exception ex) + { + Log.Error("[VIRTDESKT] Unhanded exception activating desktop: {ex}", ex.Message); + } + } + + internal static VirtualDesktop GetCurrentDesktop() + { + if (!Initialized) + { + Log.Warning("[VIRTDESKT] Cannot get current desktop, manager not initialized"); + return null; + } + + try + { + return VirtualDesktop.Current; + } + catch (Exception ex) + { + Log.Error("[VIRTDESKT] Unhanded exception returning current desktop: {ex}", ex.Message); + return null; + } + } + + private static string GetDesktopNameFromRegistry(string id) + { + var registryPath = $"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VirtualDesktops\\Desktops\\{{{id}}}"; + return (Registry.GetValue(registryPath, "Name", string.Empty) as string) ?? string.Empty; + } + + internal static Dictionary GetAllDesktopsInfo() + { + var desktops = new Dictionary(); + + try + { + foreach (var desktop in VirtualDesktop.GetDesktops()) + { + var id = desktop.Id.ToString(); + desktops[id] = string.IsNullOrWhiteSpace(desktop.Name) ? GetDesktopNameFromRegistry(id) : desktop.Name; + } + } + catch (Exception ex) + { + Log.Error("[VIRTDESKT] Unhanded exception returning all desktops information: {ex}", ex.Message); + } + + return desktops; + } +} diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.Designer.cs b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.Designer.cs index c2c8cf04..93b1e7c4 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.Designer.cs +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.Designer.cs @@ -623,7 +623,7 @@ internal static string CommandsManager_SleepCommandDescription { } /// - /// Looks up a localized string similar to Activates provided Virtual Desktop.. + /// Looks up a localized string similar to Activates provided Virtual Desktop. Desktop ID can be retrieved from the "ActiveDesktop" sensor.. /// internal static string CommandsManager_SwitchDesktopCommandDescription { get { @@ -789,6 +789,16 @@ internal static string CommandsMod_BtnStore_MessageBox9 { } } + /// + /// Looks up a localized string similar to Virtual Desktop management is unavailable on your machine. + ///Usually this is due to the virtual desktop management library not being updated to support your version of Windows.. + /// + internal static string CommandsMod_BtnStore_VirtualDesktop_Unavailable { + get { + return ResourceManager.GetString("CommandsMod_BtnStore_VirtualDesktop_Unavailable", resourceCulture); + } + } + /// /// Looks up a localized string similar to Launch in Incognito Mode. /// diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.de.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.de.resx index 056fdee4..20b051dd 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.de.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.de.resx @@ -3444,4 +3444,8 @@ Die Verfügbarkeit des Sensors ist geräteabhängig, in manchen Fällen sind kei Aktiviert den bereitgestellten virtuellen Desktop. Die Desktop-ID kann vom „ActiveDesktop“-Sensor abgerufen werden. + + Die Verwaltung virtueller Desktops ist auf Ihrem Computer nicht verfügbar. +Normalerweise liegt dies daran, dass die virtuelle Desktop-Verwaltungsbibliothek nicht aktualisiert wird, um Ihre Windows-Version zu unterstützen. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.en.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.en.resx index 0b65c7d6..e3c8f5ce 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.en.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.en.resx @@ -3320,4 +3320,8 @@ If no "mute" is provided, HASS.Agent will unmute the provided application. Please enter a valid JSON string! + + Virtual Desktop management is unavailable on your machine. +Usually this is due to the virtual desktop management library not being updated to support your version of Windows. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.es.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.es.resx index 096e4279..9d5e4889 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.es.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.es.resx @@ -3319,4 +3319,8 @@ La disponibilidad del sensor depende del dispositivo; en algunos casos, no habr Activa el escritorio virtual proporcionado. Desktop ID se puede recuperar del sensor "ActiveDesktop". + + La administración de escritorio virtual no está disponible en su máquina. +Por lo general, esto se debe a que la biblioteca de administración de escritorio virtual no se actualiza para admitir su versión de Windows. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.fr.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.fr.resx index 03c3125a..862b570d 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.fr.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.fr.resx @@ -3352,4 +3352,8 @@ La disponibilité du capteur dépend de l'appareil ; dans certains cas, aucun ca Active le bureau virtuel fourni. L'ID du bureau peut être récupéré à partir du capteur "ActiveDesktop". + + La gestion des bureaux virtuels n'est pas disponible sur votre machine. +Cela est généralement dû au fait que la bibliothèque de gestion des bureaux virtuels n'est pas mise à jour pour prendre en charge votre version de Windows. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.nl.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.nl.resx index 1afe6640..ee74d319 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.nl.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.nl.resx @@ -3340,4 +3340,8 @@ Beschikbaarheid van de sensor is afhankelijk van het apparaat, in sommige gevall Activeert het meegeleverde virtuele bureaublad. Desktop-ID kan worden opgehaald van de "ActiveDesktop"-sensor. + + Beheer van virtuele desktops is niet beschikbaar op uw machine. +Meestal komt dit doordat de virtuele desktopbeheerbibliotheek niet wordt bijgewerkt om uw versie van Windows te ondersteunen. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.pl.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.pl.resx index a9863bdc..bdc85e78 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.pl.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.pl.resx @@ -3429,4 +3429,8 @@ Dostępność czujnika zależy od urządzenia, w niektórych przypadkach czujnik Aktywuje podany pulpit wirtualny. Identyfikator pulpitu można pobrać z czujnika „ActiveDesktop”. + + Zarządzanie pulpitem wirtualnym jest niedostępne na Twoim komputerze. +Zwykle jest to spowodowane brakiem aktualizacji biblioteki zarządzania pulpitem wirtualnym do obsługi Twojej wersji systemu Windows. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.pt-br.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.pt-br.resx index 628d1bd2..eb728f3d 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.pt-br.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.pt-br.resx @@ -3366,4 +3366,8 @@ A disponibilidade do sensor depende do dispositivo; em alguns casos, nenhum sens Ativa a área de trabalho virtual fornecida. A ID da área de trabalho pode ser recuperada do sensor "ActiveDesktop". + + O gerenciamento da área de trabalho virtual não está disponível em sua máquina. +Geralmente, isso ocorre porque a biblioteca de gerenciamento de desktop virtual não está sendo atualizada para oferecer suporte à sua versão do Windows. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.resx index 6d407cdf..762d317f 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.resx @@ -3332,4 +3332,8 @@ to match Home Assistant 2023.8 requirements Activates provided Virtual Desktop. Desktop ID can be retrieved from the "ActiveDesktop" sensor. + + Virtual Desktop management is unavailable on your machine. +Usually this is due to the virtual desktop management library not being updated to support your version of Windows. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.ru.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.ru.resx index c4335412..caf6e8ff 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.ru.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.ru.resx @@ -3388,4 +3388,8 @@ Home Assistant. Активирует предоставленный виртуальный рабочий стол. Идентификатор рабочего стола можно получить с датчика ActiveDesktop. + + Управление виртуальным рабочим столом на вашем компьютере недоступно. +Обычно это происходит из-за того, что библиотека управления виртуальными рабочими столами не обновляется для поддержки вашей версии Windows. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.sl.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.sl.resx index abaea0fb..1c94b32b 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.sl.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.sl.resx @@ -3468,4 +3468,8 @@ Razpoložljivost senzorja je odvisna od naprave, v nekaterih primerih senzorji n Aktivira ponujeno navidezno namizje. ID namizja je mogoče pridobiti iz senzorja "ActiveDesktop". + + Upravljanje navideznega namizja na vašem računalniku ni na voljo. +Običajno je to posledica tega, da knjižnica za upravljanje navideznega namizja ni posodobljena za podporo vaše različice sistema Windows. + \ No newline at end of file diff --git a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.tr.resx b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.tr.resx index 0e88eec5..0f0a94ed 100644 --- a/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.tr.resx +++ b/src/HASS.Agent.Staging/HASS.Agent/Resources/Localization/Languages.tr.resx @@ -2931,4 +2931,8 @@ Sensörün kullanılabilirliği cihaza bağlıdır; bazı durumlarda sensör bul Sağlanan Sanal Masaüstünü etkinleştirir. Masaüstü Kimliği "ActiveDesktop" sensöründen alınabilir. + + Makinenizde Sanal Masaüstü yönetimi mevcut değil. +Bunun nedeni genellikle sanal masaüstü yönetim kitaplığının Windows sürümünüzü destekleyecek şekilde güncellenmemesidir. + \ No newline at end of file