From e8363a3be115b60f0270fbe1e0703ebe0babddb1 Mon Sep 17 00:00:00 2001 From: Heiko <61519853+htcfreek@users.noreply.github.com> Date: Mon, 7 Mar 2022 12:45:29 +0100 Subject: [PATCH] [PT Run] VirtualDesktopHelper & WindowWalker improvements (#16325) * Import vdh from poc * last changes * push changes * small change * add error handling to vdh * last changes * make spellchecker happy * last changes * last changes * spell check * fix settings defaults * Improve WindowWalkerSettings class * add comment * New settings and improvements * new features * subtitle and tool tip * spell fixes * small fixes * fixes * Explorer info * spell fixes * fixes and CloseWindow feature * last changes * first part of implementing KillProcess * killProcess Part 2 & Fixes * text fix and installer * update access modifiers * some fixes * update dev docs * fix dev docs * dev doc change * dev docs: add missed infos * dev docs: add link * Update src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowWalkerSettings.cs * fix build * resolve feedback * fix settings * add tests --- .github/actions/spell-check/expect.txt | 3 + .../ci/templates/build-powertoys-steps.yml | 1 + PowerToys.sln | 14 +- .../modules/launcher/plugins/windowwalker.md | 67 ++- doc/images/launcher/plugins/windowwalker.png | Bin 62294 -> 156436 bytes .../plugins/windowwalker_folder_options.png | Bin 0 -> 20541 bytes installer/PowerToysSetup/Product.wxs | 17 +- ...osoft.Plugin.WindowWalker.UnitTests.csproj | 46 ++ .../PluginSettingsTests.cs | 71 +++ .../Components/ContextMenuHelper.cs | 116 ++++ .../Components/FuzzyMatching.cs | 8 +- .../Components/OpenWindows.cs | 25 +- .../Components/ResultHelper.cs | 160 ++++++ .../Components/SearchController.cs | 14 +- .../Components/SearchResult.cs | 20 +- .../Components/SearchString.cs | 6 +- .../Components/Window.cs | 69 ++- .../Components/WindowProcess.cs | 44 +- .../Components/WindowWalkerSettings.cs | 204 +++++++ .../Images/info.dark.png | Bin 0 -> 9668 bytes .../Images/info.light.png | Bin 0 -> 6651 bytes .../Microsoft.Plugin.WindowWalker/Main.cs | 49 +- .../Microsoft.Plugin.WindowWalker.csproj | 6 + .../Properties/Resources.Designer.cs | 186 ++++++- .../Properties/Resources.resx | 66 ++- .../launcher/Wox.Infrastructure/Helper.cs | 3 +- .../VirtualDesktop/CVirtualDesktopManager.cs | 18 + .../VirtualDesktop/IVirtualDesktopManager.cs | 29 + .../Common/VirtualDesktop/VDesktop.cs | 83 +++ .../VirtualDesktop/VirtualDesktopHelper.cs | 508 ++++++++++++++++++ .../Wox.Plugin/Common/Win32/NativeMethods.cs | 5 + .../Properties/Resources.Designer.cs | 20 +- .../Wox.Plugin/Properties/Resources.resx | 9 + 33 files changed, 1764 insertions(+), 103 deletions(-) create mode 100644 doc/images/launcher/plugins/windowwalker_folder_options.png create mode 100644 src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/Microsoft.Plugin.WindowWalker.UnitTests.csproj create mode 100644 src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/PluginSettingsTests.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ContextMenuHelper.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ResultHelper.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowWalkerSettings.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Images/info.dark.png create mode 100644 src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Images/info.light.png create mode 100644 src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/CVirtualDesktopManager.cs create mode 100644 src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/IVirtualDesktopManager.cs create mode 100644 src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VDesktop.cs create mode 100644 src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VirtualDesktopHelper.cs diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index 1114179e85..4c2f5d2ef8 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -395,6 +395,7 @@ cursorpos customaction CUSTOMACTIONTEST cvd +CVirtual cwchar cwd cxfksword @@ -1829,6 +1830,7 @@ RTLREADING ruleset RUNACTIVEXCTLS runas +rundll rungameid RUNLEVEL runsettings @@ -2285,6 +2287,7 @@ vcredist VCRT vcruntime vcvars +VDesktop vdi VDId vec diff --git a/.pipelines/ci/templates/build-powertoys-steps.yml b/.pipelines/ci/templates/build-powertoys-steps.yml index 254dc0764e..3c9d828741 100644 --- a/.pipelines/ci/templates/build-powertoys-steps.yml +++ b/.pipelines/ci/templates/build-powertoys-steps.yml @@ -132,6 +132,7 @@ steps: **\Wox.Test.dll **\Microsoft.PowerToys.Run.Plugin.System.UnitTests.dll **\Microsoft.Plugin.WindowsTerminal.UnitTests.dll + **\Microsoft.Plugin.WindowWalker.UnitTests.dll !**\obj\** !**\ref\** diff --git a/PowerToys.sln b/PowerToys.sln index c56c4d9c3c..b19e84e078 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -399,6 +399,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonacoPreviewHandler", "src EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.PowerToys.Run.Plugin.TimeZone", "src\modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.TimeZone\Microsoft.PowerToys.Run.Plugin.TimeZone.csproj", "{F44934A8-36F3-49B0-9465-3831BE041CDE}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Plugin.WindowWalker.UnitTests", "src\modules\launcher\Plugins\Microsoft.Plugin.WindowWalker.UnitTests\Microsoft.Plugin.WindowWalker.UnitTests.csproj", "{8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -1080,9 +1082,8 @@ Global {04B193D7-3E21-46B8-A958-89B63A8A69DE}.Debug|x86.Build.0 = Debug|x64 {04B193D7-3E21-46B8-A958-89B63A8A69DE}.Release|x64.ActiveCfg = Release|x64 {04B193D7-3E21-46B8-A958-89B63A8A69DE}.Release|x64.Build.0 = Release|x64 - {04B193D7-3E21-46B8-A958-89B63A8A69DE}.Release|x86.ActiveCfg = Release|x64 - {04B193D7-3E21-46B8-A958-89B63A8A69DE}.Release|x86.Build.0 = Release|x64 {04B193D7-3E21-46B8-A958-89B63A8A69DE}.Release|x86.ActiveCfg = Release|Any CPU + {04B193D7-3E21-46B8-A958-89B63A8A69DE}.Release|x86.Build.0 = Release|Any CPU {F44934A8-36F3-49B0-9465-3831BE041CDE}.Debug|x64.ActiveCfg = Debug|x64 {F44934A8-36F3-49B0-9465-3831BE041CDE}.Debug|x64.Build.0 = Debug|x64 {F44934A8-36F3-49B0-9465-3831BE041CDE}.Debug|x86.ActiveCfg = Debug|x64 @@ -1091,6 +1092,14 @@ Global {F44934A8-36F3-49B0-9465-3831BE041CDE}.Release|x64.Build.0 = Release|x64 {F44934A8-36F3-49B0-9465-3831BE041CDE}.Release|x86.ActiveCfg = Release|x64 {F44934A8-36F3-49B0-9465-3831BE041CDE}.Release|x86.Build.0 = Release|x64 + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}.Debug|x64.ActiveCfg = Debug|x64 + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}.Debug|x64.Build.0 = Debug|x64 + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}.Debug|x86.ActiveCfg = Debug|x64 + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}.Debug|x86.Build.0 = Debug|x64 + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}.Release|x64.ActiveCfg = Release|x64 + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}.Release|x64.Build.0 = Release|x64 + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}.Release|x86.ActiveCfg = Release|x64 + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1}.Release|x86.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1223,6 +1232,7 @@ Global {F1F6B6B6-9F18-4A17-8B5C-97DF552C53DC} = {2F305555-C296-497E-AC20-5FA1B237996A} {04B193D7-3E21-46B8-A958-89B63A8A69DE} = {2F305555-C296-497E-AC20-5FA1B237996A} {F44934A8-36F3-49B0-9465-3831BE041CDE} = {4AFC9975-2456-4C70-94A4-84073C1CED93} + {8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1} = {4AFC9975-2456-4C70-94A4-84073C1CED93} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0} diff --git a/doc/devdocs/modules/launcher/plugins/windowwalker.md b/doc/devdocs/modules/launcher/plugins/windowwalker.md index a1a188fa98..bfdca89e1b 100644 --- a/doc/devdocs/modules/launcher/plugins/windowwalker.md +++ b/doc/devdocs/modules/launcher/plugins/windowwalker.md @@ -1,8 +1,49 @@ # Window Walker plugin The window walker plugin matches the user entered query with the open windows on the system. +The user can switch to the found windows, close them or kill their process. ![Image of Window Walker plugin](/doc/images/launcher/plugins/windowwalker.png) + +## Remarks + +### UWP Apps +- The process of an UWP app can't be detected correctly for windows that are minimized while searching. At this time they are assigned to the generic process `ApplicationFrameHost.exe`. If the user searches for such an window while it is not minimized, then the process gets assigned correctly/updated. + +### Killing processes +- Killing the Explorer process is only allowed, if each folder window is running in its own process. (See section `File Explorer setting` below.) +- You can only kill elevated processes, if you have admin permissions (UAC). +- If you kill the process of an UWP app window, you kill all instances of the app. All windows are assigned to the same process. +- Windows of UWP apps don't know their process, until they are searched in non-minimized state. + +### File Explorer setting +- To kill the Process of an Explorer window, each window has to run in a separate process. Otherwise the process is the same one as the shell process and killing the shell process will crash the shell (Windows ui). +- To enable this behavior the setting `Launch folder windows in a separate process` under `Folder Options > View` has to be enabled. +- From PowerToys Run you can open the `Folder options` dialog by clicking the information message in the search results. The information message is only shown when searching with action keyword for explorer windows and can be hidden in the plugin settings. +- Note: The folder option/process is evaluated in real time. After changing the setting it is enough to search again for the windows. + +![Folder options for Window Walker](/doc/images/launcher/plugins/windowwalker_folder_options.png) + + +## Optional plugin settings +- The optional plugin settings are implemented via the [`ISettingProvider`](/src/modules/launcher/Wox.Plugin/ISettingProvider.cs) interface from `Wox.Plugin` project. +- All available settings for the plugin are defined in the [`WindowWalkerSettings`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowWalkerSettings.cs) class of the plugin. The settings can be accessed everywhere in the plugin code via the static class instance `WindowWalkerSettings.Instance`. +- We have the following settings that the user can configure to change the behavior of the plugin: + + | Key | Default value | Name/Description | + |--------------|-----------|------------| + | `ResultsFromVisibleDesktopOnly` | `false` | Show only results from visible desktop | + | `SubtitleShowPid` | `false` | Show process id in subtitle | + | `SubtitleShowDesktopName` | `true` | Show desktop name in subtitle (If two or more desktops exist) | + | `ConfirmKillProcess` | `true` | Request confirmation when killing a process | + | `KillProcessTree` | `false` | Kill process and it's child processes | + | `OpenAfterKillAndClose` | `false` | Stay open after closing windows and killing processes (Not working with kill process confirmation) | + | `HideKillProcessOnElevatedProcesses` | `false` | Hide "kill process" button if additional permissions required | + | `HideExplorerSettingInfo` | `false` | Hide Explorer process information | + + +## Technical details + ### [`OpenWindows.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/OpenWindows.cs) - The window walker plugin uses the `EnumWindows` function to enumerate all the open windows in the [`OpenWindows.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/OpenWindows.cs) class. @@ -11,11 +52,33 @@ The window walker plugin matches the user entered query with the open windows on - It is responsible for updating the search text and performing a fuzzy search on all the open windows. ### [`Window.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/Window.cs) -- The [`Window`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/Window.cs) class represents a specific window and has functions to get the name of the window, the state of the window (whether it is visible or not), and the `SwitchTowindow` function which switches the desktop focus to the selected window. This action is performed when the user clicks on a window walker plugin result. +- The [`Window`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/Window.cs) class represents a specific window and has functions to get the name of the window, the state of the window (whether it is visible or not), the `SwitchTowindow` function which switches the desktop focus to the selected window and the `CloseThisWindow` function which closes the window. The `SwitchTowindow` action is performed when the user clicks on a window walker plugin result. - The `Window` class holds a static cache with the process information of all windows we know so far and each window instance has a property which holds its process information (name, file, ...). The process data in the cache and the window property are of the type `WindowProcess`. +- To get the desktop information for a window, we use the common [`VirtualDesktopHelper`](/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VirtualDesktopHelper.cs) in `Wox.Plugin` project. The instance of `VirtualDesktopHelper` is cached in the [`Main`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Main.cs) class of the plugin at runtime. The desktop information is stored in a property of the type [`VDesktop`](/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VDesktop.cs). ### [`WindowProcess.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowProcess.cs) -- The [`WindowProcess`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowProcess.cs) class represents a specific process for a window. It contains static methods to query process information from the system. And it contains instance methods and properties to hold/retrieve the process information we want to know about a window's process. +- The [`WindowProcess`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowProcess.cs) class represents a specific process for a window. +- It contains static methods to query process information from the system and instance methods/properties to hold/retrieve the process information we want to know about a window's process. +- Additionally, it contains the method `KillThisProcess` to kill the process. (If the user has not enough permissions to kill a process they are requested via UAC.) + +### [`ResultHelper.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ResultHelper.cs) +- The [`ResultHelper`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ResultHelper.cs) class contains the code to create the list with all results for PT Run based on the data returned from `SearchController` class. +- There is a special result that is added if the folder windows doesn't run in separate processes and the user searches for Explorer windows using the action keyword. + - This result informs the user that there is a setting that must be enabled to be able to kill Explorer processes. + - The result can be disabled in plugin options. When it is clicked it opens the folder options. + +### [`ContextMenuHelper.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ContextMenuHelper.cs) +- The [`ContextMenuHelper`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ContextMenuHelper.cs) class provides the code for the context menu items. + +### [`WindowWalkerSettings.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowWalkerSettings.cs) +- The [`WindowWalkerSettings`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowWalkerSettings.cs) class provides access to all optional plugin settings. +- The class has a static property called `Instance` that holds an instance of the class itself. This allows us to access the settings from everywhere in the plugin code without having additional parameters in our methods. ### Score The window walker plugin uses [`FuzzyMatching`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/FuzzyMatching.cs) to get the matching indices and calculates the score by creating a 2 dimensional array of the window and the query text. + +## [Unit Tests](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests) +We have a [Unit Test project](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests) that executes various test to ensure that the plugin works as expected. + +### [`PluginSettingsTests.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/PluginSettingsTests.cs) +- The [`PluginSettingsTests.cs`](/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/PluginSettingsTests.cs) class contains tests to validate that all settings exist and that they have the correct default values. diff --git a/doc/images/launcher/plugins/windowwalker.png b/doc/images/launcher/plugins/windowwalker.png index cd1368f56a5158307c7e452e4d3e1d56d50d550e..d87154c308b0cbcc86703ac83976ae89d23dcee1 100644 GIT binary patch literal 156436 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

-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%0Df_TSIsTDdZiyvRw}+6^&T^tMSBB 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 d3?4F~{D1u@Y|S%qicnwJ0o literal 62294 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 NEBoMA=dzgzURfcCs7W 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 + + @@ -86,10 +88,10 @@ - - + + @@ -1516,12 +1518,11 @@ - - - - - - + + + + + diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/Microsoft.Plugin.WindowWalker.UnitTests.csproj b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/Microsoft.Plugin.WindowWalker.UnitTests.csproj new file mode 100644 index 0000000000..da27e548e9 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/Microsoft.Plugin.WindowWalker.UnitTests.csproj @@ -0,0 +1,46 @@ + + + + net6.0-windows + false + x64 + Microsoft.Plugin.WindowWalker.UnitTests + true + true + Recommended + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + GlobalSuppressions.cs + + + StyleCop.json + + + + + 1.1.118 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/PluginSettingsTests.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/PluginSettingsTests.cs new file mode 100644 index 0000000000..c0f6719a58 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker.UnitTests/PluginSettingsTests.cs @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Reflection; +using Microsoft.Plugin.WindowWalker.Components; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Microsoft.Plugin.WindowWalker.UnitTests +{ + [TestClass] + public class PluginSettingsTests + { + [TestMethod] + public void SettingsCount() + { + // Setup + PropertyInfo[] settings = WindowWalkerSettings.Instance?.GetType()?.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance); + + // Act + var result = settings?.Length; + + // Assert + Assert.AreEqual(8, result); + } + + [DataTestMethod] + [DataRow("ResultsFromVisibleDesktopOnly")] + [DataRow("SubtitleShowPid")] + [DataRow("SubtitleShowDesktopName")] + [DataRow("ConfirmKillProcess")] + [DataRow("KillProcessTree")] + [DataRow("OpenAfterKillAndClose")] + [DataRow("HideKillProcessOnElevatedProcesses")] + [DataRow("HideExplorerSettingInfo")] + public void DoesSettingExist(string name) + { + // Setup + Type settings = WindowWalkerSettings.Instance?.GetType(); + + // Act + var result = settings?.GetProperty(name, BindingFlags.NonPublic | BindingFlags.Instance); + + // Assert + Assert.IsNotNull(result); + } + + [DataTestMethod] + [DataRow("ResultsFromVisibleDesktopOnly", false)] + [DataRow("SubtitleShowPid", false)] + [DataRow("SubtitleShowDesktopName", true)] + [DataRow("ConfirmKillProcess", true)] + [DataRow("KillProcessTree", false)] + [DataRow("OpenAfterKillAndClose", false)] + [DataRow("HideKillProcessOnElevatedProcesses", false)] + [DataRow("HideExplorerSettingInfo", false)] + public void DefaultValues(string name, bool valueExpected) + { + // Setup + WindowWalkerSettings setting = WindowWalkerSettings.Instance; + + // Act + PropertyInfo propertyInfo = setting?.GetType()?.GetProperty(name, BindingFlags.NonPublic | BindingFlags.Instance); + var result = propertyInfo?.GetValue(setting); + + // Assert + Assert.AreEqual(valueExpected, result); + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ContextMenuHelper.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ContextMenuHelper.cs new file mode 100644 index 0000000000..e007245a46 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ContextMenuHelper.cs @@ -0,0 +1,116 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +using System; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Input; +using Microsoft.Plugin.WindowWalker.Properties; +using Wox.Plugin; +using Wox.Plugin.Logger; + +namespace Microsoft.Plugin.WindowWalker.Components +{ + internal class ContextMenuHelper + { + ///

+ /// Returns a list of all s for the selected . + /// + /// Selected result + /// List of context menu results + internal static List GetContextMenuResults(in Result result) + { + if (!(result?.ContextData is Window windowData)) + { + return new List(0); + } + + var contextMenu = new List() + { + new ContextMenuResult + { + AcceleratorKey = Key.F4, + AcceleratorModifiers = ModifierKeys.Control, + FontFamily = "Segoe MDL2 Assets", + Glyph = "\xE8BB", // E8B8 => Symbol: ChromeClose + Title = $"{Resources.wox_plugin_windowwalker_Close} (Ctrl+F4)", + Action = _ => + { + if (!windowData.IsWindow) + { + Log.Debug($"Can not close the window '{windowData.Title}' ({windowData.Hwnd}), because it doesn't exist.", typeof(ContextMenuHelper)); + return false; + } + + // As a workaround to close PT Run after executing the context menu command, we switch to the window before closing it (Issue #16601). + // We use the setting OpenAfterKillAndClose to detect if we have to switch. + windowData.CloseThisWindow(!WindowWalkerSettings.Instance.OpenAfterKillAndClose); + + return !WindowWalkerSettings.Instance.OpenAfterKillAndClose; + }, + }, + }; + + // Hide menu if Explorer.exe is the shell process or the process name is ApplicationFrameHost.exe + // In the first case we would crash the windows ui and in the second case we would kill the generic process for uwp apps. + if (!windowData.Process.IsShellProcess && !(windowData.Process.IsUwpApp & windowData.Process.Name.ToLower() == "applicationframehost.exe") + && !(windowData.Process.IsFullAccessDenied & WindowWalkerSettings.Instance.HideKillProcessOnElevatedProcesses)) + { + contextMenu.Add(new ContextMenuResult + { + AcceleratorKey = Key.Delete, + AcceleratorModifiers = ModifierKeys.Control, + FontFamily = "Segoe MDL2 Assets", + Glyph = "\xE74D", // E74D => Symbol: Delete + Title = $"{Resources.wox_plugin_windowwalker_Kill} (Ctrl+Delete)", + Action = _ => KillProcessCommand(windowData), + }); + } + + return contextMenu; + } + + /// + /// Method to initiate killing the process of a window + /// + /// Window data + /// True if the PT Run window should close, otherwise false. + private static bool KillProcessCommand(Window window) + { + // Validate process + if (!window.IsWindow || !window.Process.DoesExist || !window.Process.Name.Equals(WindowProcess.GetProcessNameFromProcessID(window.Process.ProcessID)) ) + { + Log.Debug($"Can not kill process '{window.Process.Name}' ({window.Process.ProcessID}) of the window '{window.Title}' ({window.Hwnd}), because it doesn't exist.", typeof(ContextMenuHelper)); + return false; + } + + // Request user confirmation + if (WindowWalkerSettings.Instance.ConfirmKillProcess) + { + string messageBody = $"{Resources.wox_plugin_windowwalker_KillMessage}\n" + + $"{window.Process.Name} ({window.Process.ProcessID})\n\n" + + $"{(window.Process.IsUwpApp ? Resources.wox_plugin_windowwalker_KillMessageUwp : Resources.wox_plugin_windowwalker_KillMessageQuestion)}"; + MessageBoxResult messageBoxResult = MessageBox.Show( + messageBody, + Resources.wox_plugin_windowwalker_plugin_name + " - " + Resources.wox_plugin_windowwalker_KillMessageTitle, + MessageBoxButton.YesNo, + MessageBoxImage.Warning); + + if (messageBoxResult == MessageBoxResult.No) + { + return false; + } + } + + // As a workaround to close PT Run before executing the command, we switch to the window before killing it's process + if (!WindowWalkerSettings.Instance.OpenAfterKillAndClose) + { + window.SwitchToWindow(); + } + + // Kill process + window.Process.KillThisProcess(WindowWalkerSettings.Instance.KillProcessTree); + return !WindowWalkerSettings.Instance.OpenAfterKillAndClose; + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/FuzzyMatching.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/FuzzyMatching.cs index d43fb479a2..5794937250 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/FuzzyMatching.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/FuzzyMatching.cs @@ -13,7 +13,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Class housing fuzzy matching methods /// - public static class FuzzyMatching + internal static class FuzzyMatching { /// /// Finds the best match (the one with the most @@ -25,7 +25,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// the text to search for /// returns the index location of each of the letters of the matches [System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1814:Prefer jagged arrays over multidimensional", Justification = "matches does not waste space with the current implementation, however this could probably be optimized to store the indices of matches instead of boolean values. Currently there are no unit tests for this, but we could refactor if memory/perf becomes an issue. ")] - public static List FindBestFuzzyMatch(string text, string searchText) + internal static List FindBestFuzzyMatch(string text, string searchText) { if (searchText == null) { @@ -86,7 +86,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// one the search string and each cell marked as an intersection between the two /// a list of the possible combinations that match the search text [System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1814:Prefer jagged arrays over multidimensional", Justification = "matches does not waste space with the current implementation, however this could probably be optimized to store the indices of matches instead of boolean values. Currently there are no unit tests for this, but we could refactor if memory/perf becomes an issue. ")] - public static List> GetAllMatchIndexes(bool[,] matches) + internal static List> GetAllMatchIndexes(bool[,] matches) { if (matches == null) { @@ -127,7 +127,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// the index of the matches /// an integer representing the score - public static int CalculateScoreForMatches(List matches) + internal static int CalculateScoreForMatches(List matches) { if (matches == null) { diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/OpenWindows.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/OpenWindows.cs index 77a6e62373..47fd160779 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/OpenWindows.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/OpenWindows.cs @@ -34,7 +34,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the list of all open windows /// - public List Windows + internal List Windows { get { return new List(windows); } } @@ -44,7 +44,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// the first instance gets created and that all the requests /// end up at that one instance /// - public static OpenWindows Instance + internal static OpenWindows Instance { get { @@ -69,7 +69,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Updates the list of open windows /// - public void UpdateOpenWindowsList() + internal void UpdateOpenWindowsList() { windows.Clear(); EnumWindowsProc callbackptr = new EnumWindowsProc(WindowEnumerationCallBack); @@ -83,22 +83,21 @@ namespace Microsoft.Plugin.WindowWalker.Components /// Value being passed from the caller (we don't use this but might come in handy /// in the future /// true to make sure to continue enumeration - public bool WindowEnumerationCallBack(IntPtr hwnd, IntPtr lParam) + internal bool WindowEnumerationCallBack(IntPtr hwnd, IntPtr lParam) { Window newWindow = new Window(hwnd); if (newWindow.IsWindow && newWindow.Visible && newWindow.IsOwner && (!newWindow.IsToolWindow || newWindow.IsAppWindow) && !newWindow.TaskListDeleted && - newWindow.ClassName != "Windows.UI.Core.CoreWindow" && newWindow.ProcessInfo.Name != _powerLauncherExe) + (newWindow.Desktop.IsVisible || !WindowWalkerSettings.Instance.ResultsFromVisibleDesktopOnly) && + newWindow.ClassName != "Windows.UI.Core.CoreWindow" && newWindow.Process.Name != _powerLauncherExe) { - // To hide (not add) preloaded uwp app windows that are invisible to the user we check the cloak state in DWM to be "none". (Issue #13637.) - // (If user asking to see these windows again we can add an optional plugin setting in the future.) - // [@htcfreek, 2022-02-01: Removed the IsCloaked check to list windows from virtual desktops other than the current one again (#15887). In a second PR I will fix it re-implement it with improved code again.] - // if (!newWindow.IsCloaked) - // { - windows.Add(newWindow); - - // } + // To hide (not add) preloaded uwp app windows that are invisible to the user and other cloaked windows, we check the cloak state. (Issue #13637.) + // (If user asking to see cloaked uwp app windows again we can add an optional plugin setting in the future.) + if (!newWindow.IsCloaked || newWindow.GetWindowCloakState() == Window.WindowCloakState.OtherDesktop) + { + windows.Add(newWindow); + } } return true; diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ResultHelper.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ResultHelper.cs new file mode 100644 index 0000000000..adb8a46b83 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/ResultHelper.cs @@ -0,0 +1,160 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +using System.Collections.Generic; +using Microsoft.Plugin.WindowWalker.Properties; +using Wox.Infrastructure; +using Wox.Plugin; + +namespace Microsoft.Plugin.WindowWalker.Components +{ + /// + /// Helper class to work with results + /// + internal static class ResultHelper + { + /// + /// Returns a list of all results for the query. + /// + /// List with all search controller matches + /// The path to the result icon + /// List of results + internal static List GetResultList(List searchControllerResults, bool isKeywordSearch, string icon, string infoIcon) + { + bool addExplorerInfo = false; + List resultsList = new List(); + + foreach (SearchResult x in searchControllerResults) + { + if (x.Result.Process.Name.ToLower() == "explorer.exe" && x.Result.Process.IsShellProcess) + { + addExplorerInfo = true; + } + + resultsList.Add(new Result() + { + Title = x.Result.Title, + IcoPath = icon, + SubTitle = GetSubtitle(x.Result), + ContextData = x.Result, + Action = c => + { + x.Result.SwitchToWindow(); + return true; + }, + + // For debugging you can set the second parameter to true to see more informations. + ToolTipData = GetToolTip(x.Result, false), + }); + } + + if (addExplorerInfo && isKeywordSearch && !WindowWalkerSettings.Instance.HideExplorerSettingInfo) + { + resultsList.Add(GetExplorerInfoResult(infoIcon)); + } + + return resultsList; + } + + /// + /// Returns the subtitle for a result + /// + /// The window properties of the result + /// String with the subtitle + private static string GetSubtitle(Window window) + { + if (window == null || !(window is Window)) + { + return string.Empty; + } + + string subtitleText = Resources.wox_plugin_windowwalker_Running + ": " + window.Process.Name; + + if (WindowWalkerSettings.Instance.SubtitleShowPid) + { + subtitleText += $" ({window.Process.ProcessID})"; + } + + if (WindowWalkerSettings.Instance.SubtitleShowDesktopName && Main.VirtualDesktopHelperInstance.GetDesktopCount() > 1) + { + subtitleText += $" - {Resources.wox_plugin_windowwalker_Desktop}: {window.Desktop.Name}"; + } + + return subtitleText; + } + + /// + /// Returns the tool tip for a result + /// + /// The window properties of the result + /// Value indicating if a detailed debug tooltip should be returned + /// Tooltip for the result or null of failure + private static ToolTipData GetToolTip(Window window, bool debugToolTip) + { + if (window == null || !(window is Window)) + { + return null; + } + + if (!debugToolTip) + { + string text = $"{Resources.wox_plugin_windowwalker_Process}: {window.Process.Name}"; + text += $"\n{Resources.wox_plugin_windowwalker_ProcessId}: {window.Process.ProcessID}"; + + if (Main.VirtualDesktopHelperInstance.GetDesktopCount() > 1) + { + text += $"\n{Resources.wox_plugin_windowwalker_Desktop}: {window.Desktop.Name}"; + + if (!window.Desktop.IsAllDesktopsView) + { + text += $" ({Resources.wox_plugin_windowwalker_Number} {window.Desktop.Number})"; + } + } + + return new ToolTipData(window.Title, text); + } + else + { + string text = $"hWnd: {window.Hwnd}\n" + + $"Window class: {window.ClassName}\n" + + $"Process ID: {window.Process.ProcessID}\n" + + $"Thread ID: {window.Process.ThreadID}\n" + + $"Process: {window.Process.Name}\n" + + $"Process exists: {window.Process.DoesExist}\n" + + $"Is full access denied: {window.Process.IsFullAccessDenied}\n" + + $"Is uwp app: {window.Process.IsUwpApp}\n" + + $"Is ShellProcess: {window.Process.IsShellProcess}\n" + + $"Is window cloaked: {window.IsCloaked}\n" + + $"Window cloak state: {window.GetWindowCloakState()}\n" + + $"Desktop name: {window.Desktop.Name}" + + $"Desktop number: {window.Desktop.Number}\n" + + $"Desktop is visible: {window.Desktop.IsVisible}\n" + + $"Desktop position: {window.Desktop.Position}\n" + + $"Is AllDesktops view: {window.Desktop.IsAllDesktopsView}"; + + return new ToolTipData(window.Title, text); + } + } + + /// + /// Returns an information result about the explorer setting + /// + /// The path to the info icon. + /// An object of the type with the information. + private static Result GetExplorerInfoResult(string iIcon) + { + return new Result() + { + Title = Resources.wox_plugin_windowwalker_ExplorerInfoTitle, + IcoPath = iIcon, + SubTitle = Resources.wox_plugin_windowwalker_ExplorerInfoSubTitle, + Action = c => + { + Helper.OpenInShell("rundll32.exe", "shell32.dll,Options_RunDLL 7"); // "shell32.dll,Options_RunDLL 7" opens the view tab in folder options of explorer. + return true; + }, + Score = 100_000, + }; + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchController.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchController.cs index 18740ce19b..d7962f0286 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchController.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchController.cs @@ -34,7 +34,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets or sets the current search text /// - public string SearchText + internal string SearchText { get { @@ -51,7 +51,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the open window search results /// - public List SearchMatches + internal List SearchMatches { get { return new List(searchMatches).OrderByDescending(x => x.Score).ToList(); } } @@ -59,7 +59,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets singleton Pattern /// - public static SearchController Instance + internal static SearchController Instance { get { @@ -84,7 +84,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Event handler for when the search text has been updated /// - public void UpdateSearchText(string searchText) + internal void UpdateSearchText(string searchText) { SearchText = searchText; SyncOpenWindowsWithModel(); @@ -93,7 +93,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Syncs the open windows with the OpenWindows Model /// - public void SyncOpenWindowsWithModel() + internal void SyncOpenWindowsWithModel() { System.Diagnostics.Debug.Print("Syncing WindowSearch result with OpenWindows Model"); @@ -126,7 +126,7 @@ namespace Microsoft.Plugin.WindowWalker.Components foreach (var window in openWindows) { var titleMatch = FuzzyMatching.FindBestFuzzyMatch(window.Title, searchString.SearchText); - var processMatch = FuzzyMatching.FindBestFuzzyMatch(window.ProcessInfo.Name, searchString.SearchText); + var processMatch = FuzzyMatching.FindBestFuzzyMatch(window.Process.Name, searchString.SearchText); if ((titleMatch.Count != 0 || processMatch.Count != 0) && window.Title.Length != 0) @@ -145,7 +145,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Event args for a window list update event /// - public class SearchResultUpdateEventArgs : EventArgs + internal class SearchResultUpdateEventArgs : EventArgs { } } diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchResult.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchResult.cs index c059a1e463..9d4be2cf33 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchResult.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchResult.cs @@ -10,12 +10,12 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Contains search result windows with each window including the reason why the result was included /// - public class SearchResult + internal class SearchResult { /// /// Gets the actual window reference for the search result /// - public Window Result + internal Window Result { get; private set; @@ -24,7 +24,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the list of indexes of the matching characters for the search in the title window /// - public List SearchMatchesInTitle + internal List SearchMatchesInTitle { get; private set; @@ -34,7 +34,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// Gets the list of indexes of the matching characters for the search in the /// name of the process /// - public List SearchMatchesInProcessName + internal List SearchMatchesInProcessName { get; private set; @@ -43,7 +43,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the type of match (shortcut, fuzzy or nothing) /// - public SearchType SearchResultMatchType + internal SearchType SearchResultMatchType { get; private set; @@ -52,7 +52,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a score indicating how well this matches what we are looking for /// - public int Score + internal int Score { get; private set; @@ -61,7 +61,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the source of where the best score was found /// - public TextType BestScoreSource + internal TextType BestScoreSource { get; private set; @@ -71,7 +71,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// Initializes a new instance of the class. /// Constructor /// - public SearchResult(Window window, List matchesInTitle, List matchesInProcessName, SearchType matchType) + internal SearchResult(Window window, List matchesInTitle, List matchesInProcessName, SearchType matchType) { Result = window; SearchMatchesInTitle = matchesInTitle; @@ -104,7 +104,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// The type of text that a string represents /// - public enum TextType + internal enum TextType { ProcessName, WindowTitle, @@ -113,7 +113,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// The type of search /// - public enum SearchType + internal enum SearchType { /// /// the search string is empty, which means all open windows are diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchString.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchString.cs index c71711f988..fb54278ff0 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchString.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/SearchString.cs @@ -16,7 +16,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// Gets where is the search string coming from (is it a shortcut /// or direct string, etc...) /// - public SearchResult.SearchType SearchType + internal SearchResult.SearchType SearchType { get; private set; @@ -25,7 +25,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the actual text we are searching for /// - public string SearchText + internal string SearchText { get; private set; @@ -37,7 +37,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// text from search /// type of search - public SearchString(string searchText, SearchResult.SearchType searchType) + internal SearchString(string searchText, SearchResult.SearchType searchType) { SearchText = searchText; SearchType = searchType; diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/Window.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/Window.cs index 205a105531..a5ad367927 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/Window.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/Window.cs @@ -9,6 +9,7 @@ using System.Diagnostics; using System.Globalization; using System.Text; using System.Threading.Tasks; +using Wox.Plugin.Common.VirtualDesktop.Helper; using Wox.Plugin.Common.Win32; using Wox.Plugin.Logger; @@ -17,7 +18,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Represents a specific open window /// - public class Window + internal class Window { /// /// The handle to the window @@ -35,10 +36,15 @@ namespace Microsoft.Plugin.WindowWalker.Components /// private readonly WindowProcess processInfo; + /// + /// An instance of that contains the desktop information for the window + /// + private readonly VDesktop desktopInfo; + /// /// Gets the title of the window (the string displayed at the top of the window) /// - public string Title + internal string Title { get { @@ -64,7 +70,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the handle to the window /// - public IntPtr Hwnd + internal IntPtr Hwnd { get { return hwnd; } } @@ -72,15 +78,23 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the object of with the process information of the window /// - public WindowProcess ProcessInfo + internal WindowProcess Process { get { return processInfo; } } + /// + /// Gets the object of with the desktop information of the window + /// + internal VDesktop Desktop + { + get { return desktopInfo; } + } + /// /// Gets the name of the class for the window represented /// - public string ClassName + internal string ClassName { get { @@ -91,7 +105,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the window is visible (might return false if it is a hidden IE tab) /// - public bool Visible + internal bool Visible { get { @@ -103,7 +117,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// Gets a value indicating whether the window is cloaked (true) or not (false). /// (A cloaked window is not visible to the user. But the window is still composed by DWM.) /// - public bool IsCloaked + internal bool IsCloaked { get { @@ -114,7 +128,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the specified window handle identifies an existing window. /// - public bool IsWindow + internal bool IsWindow { get { @@ -125,7 +139,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the window is a toolwindow /// - public bool IsToolWindow + internal bool IsToolWindow { get { @@ -138,7 +152,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the window is an appwindow /// - public bool IsAppWindow + internal bool IsAppWindow { get { @@ -151,7 +165,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the window has ITaskList_Deleted property /// - public bool TaskListDeleted + internal bool TaskListDeleted { get { @@ -162,7 +176,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the specified windows is the owner (i.e. doesn't have an owner) /// - public bool IsOwner + internal bool IsOwner { get { @@ -173,7 +187,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the window is minimized /// - public bool Minimized + internal bool Minimized { get { @@ -186,17 +200,18 @@ namespace Microsoft.Plugin.WindowWalker.Components /// Initializes a new Window representation /// /// the handle to the window we are representing - public Window(IntPtr hwnd) + internal Window(IntPtr hwnd) { // TODO: Add verification as to whether the window handle is valid this.hwnd = hwnd; processInfo = CreateWindowProcessInstance(hwnd); + desktopInfo = Main.VirtualDesktopHelperInstance.GetWindowDesktop(hwnd); } /// /// Switches desktop focus to the window /// - public void SwitchToWindow() + internal void SwitchToWindow() { // The following block is necessary because // 1) There is a weird flashing behavior when trying @@ -219,6 +234,19 @@ namespace Microsoft.Plugin.WindowWalker.Components NativeMethods.FlashWindow(Hwnd, true); } + /// + /// Closes the window + /// + internal void CloseThisWindow(bool switchBeforeClose) + { + if (switchBeforeClose) + { + SwitchToWindow(); + } + + _ = NativeMethods.SendMessage(Hwnd, Win32Constants.WM_SYSCOMMAND, Win32Constants.SC_CLOSE); + } + /// /// Converts the window name to string along with the process name /// @@ -233,7 +261,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// Returns what the window size is /// /// The state (minimized, maximized, etc..) of the window - public WindowSizeState GetWindowSizeState() + internal WindowSizeState GetWindowSizeState() { NativeMethods.GetWindowPlacement(Hwnd, out WINDOWPLACEMENT placement); @@ -255,7 +283,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Enum to simplify the state of the window /// - public enum WindowSizeState + internal enum WindowSizeState { Normal, Minimized, @@ -268,7 +296,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// (A cloaked window is not visible to the user. But the window is still composed by DWM.) /// /// The state (none, app, ...) of the window - public WindowCloakState GetWindowCloakState() + internal WindowCloakState GetWindowCloakState() { _ = NativeMethods.DwmGetWindowAttribute(Hwnd, (int)DwmWindowAttributes.Cloaked, out int isCloakedState, sizeof(uint)); @@ -279,7 +307,7 @@ namespace Microsoft.Plugin.WindowWalker.Components case (int)DwmWindowCloakStates.CloakedApp: return WindowCloakState.App; case (int)DwmWindowCloakStates.CloakedShell: - return WindowCloakState.Shell; + return Main.VirtualDesktopHelperInstance.IsWindowCloakedByVirtualDesktopManager(hwnd) ? WindowCloakState.OtherDesktop : WindowCloakState.Shell; case (int)DwmWindowCloakStates.CloakedInherited: return WindowCloakState.Inherited; default: @@ -290,12 +318,13 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Enum to simplify the cloak state of the window /// - public enum WindowCloakState + internal enum WindowCloakState { None, App, Shell, Inherited, + OtherDesktop, Unknown, } diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowProcess.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowProcess.cs index ed745443cd..88a9cdc12e 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowProcess.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowProcess.cs @@ -5,6 +5,7 @@ using System; using System.Diagnostics; using System.Linq; using System.Text; +using Wox.Infrastructure; using Wox.Plugin.Common.Win32; namespace Microsoft.Plugin.WindowWalker.Components @@ -12,7 +13,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Represents the process data of an open window. This class is used in the process cache and for the process object of the open window /// - public class WindowProcess + internal class WindowProcess { /// /// Maximum size of a file name @@ -27,7 +28,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the id of the process /// - public uint ProcessID + internal uint ProcessID { get; private set; } @@ -35,7 +36,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the id of the thread /// - public uint ThreadID + internal uint ThreadID { get; private set; } @@ -43,7 +44,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets the name of the process /// - public string Name + internal string Name { get; private set; } @@ -51,7 +52,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the window belongs to an 'Universal Windows Platform (UWP)' process /// - public bool IsUwpApp + internal bool IsUwpApp { get { return _isUwpApp; } } @@ -60,7 +61,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// Gets a value indicating whether this is the shell process or not /// The shell process (like explorer.exe) hosts parts of the user interface (like taskbar, start menu, ...) /// - public bool IsShellProcess + internal bool IsShellProcess { get { @@ -72,7 +73,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether the process exists on the machine /// - public bool DoesExist + internal bool DoesExist { get { @@ -98,7 +99,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// Gets a value indicating whether full access to the process is denied or not /// - public bool IsFullAccessDenied + internal bool IsFullAccessDenied { get; private set; } @@ -109,7 +110,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// New process id. /// New thread id. /// New process name. - public WindowProcess(uint pid, uint tid, string name) + internal WindowProcess(uint pid, uint tid, string name) { UpdateProcessInfo(pid, tid, name); _isUwpApp = Name.ToUpperInvariant().Equals("APPLICATIONFRAMEHOST.EXE", StringComparison.Ordinal); @@ -121,7 +122,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// New process id. /// New thread id. /// New process name. - public void UpdateProcessInfo(uint pid, uint tid, string name) + internal void UpdateProcessInfo(uint pid, uint tid, string name) { // TODO: Add verification as to wether the process id and thread id is valid ProcessID = pid; @@ -137,7 +138,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// The handle to the window /// The process ID - public static uint GetProcessIDFromWindowHandle(IntPtr hwnd) + internal static uint GetProcessIDFromWindowHandle(IntPtr hwnd) { _ = NativeMethods.GetWindowThreadProcessId(hwnd, out uint processId); return processId; @@ -148,7 +149,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// The handle to the window /// The thread ID - public static uint GetThreadIDFromWindowHandle(IntPtr hwnd) + internal static uint GetThreadIDFromWindowHandle(IntPtr hwnd) { uint threadId = NativeMethods.GetWindowThreadProcessId(hwnd, out _); return threadId; @@ -159,7 +160,7 @@ namespace Microsoft.Plugin.WindowWalker.Components /// /// The id of the process/param> /// A string representing the process name or an empty string if the function fails - public static string GetProcessNameFromProcessID(uint pid) + internal static string GetProcessNameFromProcessID(uint pid) { IntPtr processHandle = NativeMethods.OpenProcess(ProcessAccessFlags.QueryLimitedInformation, true, (int)pid); StringBuilder processName = new StringBuilder(MaximumFileNameLength); @@ -176,6 +177,23 @@ namespace Microsoft.Plugin.WindowWalker.Components } } + /// + /// Kills the process by it's id. If permissions are required, they will be requested. + /// + /// Kill process and sub processes. + internal void KillThisProcess(bool killProcessTree) + { + if (IsFullAccessDenied) + { + string killTree = killProcessTree ? " /t" : string.Empty; + Helper.OpenInShell("taskkill.exe", $"/pid {(int)ProcessID} /f{killTree}", null, true, true); + } + else + { + Process.GetProcessById((int)ProcessID).Kill(killProcessTree); + } + } + /// /// Gets a boolean value indicating whether the access to a process using the AllAccess flag is denied or not. /// diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowWalkerSettings.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowWalkerSettings.cs new file mode 100644 index 0000000000..476845c80f --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Components/WindowWalkerSettings.cs @@ -0,0 +1,204 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using Microsoft.Plugin.WindowWalker.Properties; +using Microsoft.PowerToys.Settings.UI.Library; + +[assembly: InternalsVisibleTo("Microsoft.Plugin.WindowWalker.UnitTests")] + +namespace Microsoft.Plugin.WindowWalker.Components +{ + /// + /// Additional settings for the WindowWalker plugin. + /// + /// Some code parts reused from TimeZone plugin. + internal sealed class WindowWalkerSettings + { + /// + /// Are the class properties initialized with default values + /// + private readonly bool _initialized; + + /// + /// An instance of the class + /// + private static WindowWalkerSettings instance; + + /// + /// Gets a value indicating whether we only search for windows on the currently visible desktop or on all desktops. + /// + internal bool ResultsFromVisibleDesktopOnly { get; private set; } + + /// + /// Gets a value indicating whether the process id is shown in the subtitle. + /// + internal bool SubtitleShowPid { get; private set; } + + /// + /// Gets a value indicating whether the desktop name is shown in the subtitle. + /// We don't show the desktop name if there is only one desktop. + /// + internal bool SubtitleShowDesktopName { get; private set; } + + /// + /// Gets a value indicating whether we request a confirmation when the user kills a process. + /// + internal bool ConfirmKillProcess { get; private set; } + + /// + /// Gets a value indicating whether to kill the entire process tree or the selected process only. + /// + internal bool KillProcessTree { get; private set; } + + /// + /// Gets a value indicating whether PowerToys run should stay open after executing killing process and closing window. + /// + internal bool OpenAfterKillAndClose { get; private set; } + + /// + /// Gets a value indicating whether the "kill process" command is hidden on processes that require additional permissions (UAC). + /// + internal bool HideKillProcessOnElevatedProcesses { get; private set; } + + /// + /// Gets a value indicating whether we show the explorer settings info or not. + /// + internal bool HideExplorerSettingInfo { get; private set; } + + /// + /// Initializes a new instance of the class. + /// Private constructor to make sure there is never more than one instance of this class + /// + private WindowWalkerSettings() + { + // Init class properties with default values + UpdateSettings(null); + _initialized = true; + } + + /// + /// Gets an instance property of this class that makes sure that the first instance gets created + /// and that all the requests end up at that one instance. + /// The benefit of this is that we don't need additional variables/parameters + /// to communicate the settings between plugin's classes/methods. + /// We can simply access this one instance, whenever we need the actual settings. + /// + internal static WindowWalkerSettings Instance + { + get + { + if (instance == null) + { + instance = new WindowWalkerSettings(); + } + + return instance; + } + } + + /// + /// Return a list with all additional plugin options. + /// + /// A list with all additional plugin options. + internal static List GetAdditionalOptions() + { + var optionList = new List + { + new PluginAdditionalOption + { + Key = nameof(ResultsFromVisibleDesktopOnly), + DisplayLabel = Resources.wox_plugin_windowwalker_SettingResultsVisibleDesktop, + Value = false, + }, + new PluginAdditionalOption + { + Key = nameof(SubtitleShowPid), + DisplayLabel = Resources.wox_plugin_windowwalker_SettingSubtitlePid, + Value = false, + }, + new PluginAdditionalOption + { + // ToDo: When description property is implemented (#15853), move the note in brackets to description and update to: "The information is only shown, if more than one desktop exists." + Key = nameof(SubtitleShowDesktopName), + DisplayLabel = Resources.wox_plugin_windowwalker_SettingSubtitleDesktopName, + Value = true, + }, + new PluginAdditionalOption + { + Key = nameof(ConfirmKillProcess), + DisplayLabel = Resources.wox_plugin_windowwalker_SettingConfirmKillProcess, + Value = true, + }, + new PluginAdditionalOption + { + // ToDo: When description property is implemented (#15853), add description: "Be careful when activating this." + Key = nameof(KillProcessTree), + DisplayLabel = Resources.wox_plugin_windowwalker_SettingKillProcessTree, + Value = false, + }, + new PluginAdditionalOption + { + // ToDo: When description property is implemented (#15853), move the note in brackets to description. + Key = nameof(OpenAfterKillAndClose), + DisplayLabel = Resources.wox_plugin_windowwalker_SettingOpenAfterKillAndClose, + Value = false, + }, + new PluginAdditionalOption + { + Key = nameof(HideKillProcessOnElevatedProcesses), + DisplayLabel = Resources.wox_plugin_windowwalker_SettingHideKillProcess, + Value = false, + }, + new PluginAdditionalOption + { + // ToDo: When description property is implemented (#15853), add description: "Message is only shown when searching with direct activation command." + Key = nameof(HideExplorerSettingInfo), + DisplayLabel = Resources.wox_plugin_windowwalker_SettingExplorerSettingInfo, + Value = false, + }, + }; + + return optionList; + } + + /// + /// Update this settings. + /// + /// The settings for all power launcher plugins. + internal void UpdateSettings(PowerLauncherPluginSettings settings) + { + if ((settings is null || settings.AdditionalOptions is null) & _initialized) + { + return; + } + + ResultsFromVisibleDesktopOnly = GetSettingOrDefault(settings, nameof(ResultsFromVisibleDesktopOnly)); + SubtitleShowPid = GetSettingOrDefault(settings, nameof(SubtitleShowPid)); + SubtitleShowDesktopName = GetSettingOrDefault(settings, nameof(SubtitleShowDesktopName)); + ConfirmKillProcess = GetSettingOrDefault(settings, nameof(ConfirmKillProcess)); + KillProcessTree = GetSettingOrDefault(settings, nameof(KillProcessTree)); + OpenAfterKillAndClose = GetSettingOrDefault(settings, nameof(OpenAfterKillAndClose)); + HideKillProcessOnElevatedProcesses = GetSettingOrDefault(settings, nameof(HideKillProcessOnElevatedProcesses)); + HideExplorerSettingInfo = GetSettingOrDefault(settings, nameof(HideExplorerSettingInfo)); + } + + /// + /// Return one setting of the given settings list with the given name. + /// + /// The object that contain all settings. + /// The name of the setting. + /// A settings value. + private static bool GetSettingOrDefault(PowerLauncherPluginSettings settings, string name) + { + var option = settings?.AdditionalOptions?.FirstOrDefault(x => x.Key == name); + + // If a setting isn't available, we use the value defined in the method GetAdditionalOptions() as fallback. + // We can use First() instead of FirstOrDefault() because the values must exist. Otherwise, we made a mistake when defining the settings. + return option?.Value ?? GetAdditionalOptions().First(x => x.Key == name).Value; + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Images/info.dark.png b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Images/info.dark.png new file mode 100644 index 0000000000000000000000000000000000000000..32ad2388bfa8c28d8460dcecafc05269af6f07a7 GIT binary patch literal 9668 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 Properties.Resources.wox_plugin_windowwalker_plugin_name; + private readonly string _assemblyName = Assembly.GetExecutingAssembly().GetName().Name; + public string Description => Properties.Resources.wox_plugin_windowwalker_plugin_description; + internal static readonly VirtualDesktopHelper VirtualDesktopHelperInstance = new VirtualDesktopHelper(); + static Main() { OpenWindows.Instance.UpdateOpenWindowsList(); @@ -33,24 +42,17 @@ namespace Microsoft.Plugin.WindowWalker throw new ArgumentNullException(nameof(query)); } + VirtualDesktopHelperInstance.UpdateDesktopList(); OpenWindows.Instance.UpdateOpenWindowsList(); SearchController.Instance.UpdateSearchText(query.Search); List searchControllerResults = SearchController.Instance.SearchMatches; - return searchControllerResults.Select(x => new Result() - { - Title = x.Result.Title, - IcoPath = IconPath, - SubTitle = Properties.Resources.wox_plugin_windowwalker_running + ": " + x.Result.ProcessInfo.Name, - Action = c => - { - x.Result.SwitchToWindow(); - return true; - }, + return ResultHelper.GetResultList(searchControllerResults, !string.IsNullOrEmpty(query.ActionKeyword), IconPath, InfoIconPath); + } - // For debugging you can remove the comment sign in the next line. - // ToolTipData = new ToolTipData(x.Result.Title, $"hWnd: {x.Result.Hwnd}\nWindow class: {x.Result.ClassName}\nProcess ID: {x.Result.ProcessInfo.ProcessID}\nThread ID: {x.Result.ProcessInfo.ThreadID}\nProcess: {x.Result.ProcessInfo.Name}\nProcess exists: {x.Result.ProcessInfo.DoesExist}\nIs full access denied: {x.Result.ProcessInfo.IsFullAccessDenied}\nIs uwp app: {x.Result.ProcessInfo.IsUwpApp}\nIs ShellProcess: {x.Result.ProcessInfo.IsShellProcess}\nIs window cloaked: {x.Result.IsCloaked}\nWindow cloak state: {x.Result.GetWindowCloakState()}"), - }).ToList(); + public List LoadContextMenus(Result selectedResult) + { + return ContextMenuHelper.GetContextMenuResults(selectedResult); } public void Init(PluginInitContext context) @@ -60,16 +62,23 @@ namespace Microsoft.Plugin.WindowWalker UpdateIconPath(Context.API.GetCurrentTheme()); } + public IEnumerable AdditionalOptions + { + get { return WindowWalkerSettings.GetAdditionalOptions(); } + } + // Todo : Update with theme based IconPath private void UpdateIconPath(Theme theme) { if (theme == Theme.Light || theme == Theme.HighContrastWhite) { IconPath = "Images/windowwalker.light.png"; + InfoIconPath = "Images/info.light.png"; } else { IconPath = "Images/windowwalker.dark.png"; + InfoIconPath = "Images/info.dark.png"; } } @@ -87,5 +96,15 @@ namespace Microsoft.Plugin.WindowWalker { return Properties.Resources.wox_plugin_windowwalker_plugin_description; } + + public Control CreateSettingPanel() + { + throw new NotImplementedException(); + } + + public void UpdateSettings(PowerLauncherPluginSettings settings) + { + WindowWalkerSettings.Instance.UpdateSettings(settings); + } } } diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Microsoft.Plugin.WindowWalker.csproj b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Microsoft.Plugin.WindowWalker.csproj index a33eae9c31..5846d2661d 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Microsoft.Plugin.WindowWalker.csproj +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Microsoft.Plugin.WindowWalker.csproj @@ -111,6 +111,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.Designer.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.Designer.cs index 490951c71a..af563abb3e 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.Designer.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Microsoft.Plugin.WindowWalker.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { @@ -60,6 +60,96 @@ namespace Microsoft.Plugin.WindowWalker.Properties { } } + /// + /// Looks up a localized string similar to Close window. + /// + public static string wox_plugin_windowwalker_Close { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_Close", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Desktop. + /// + public static string wox_plugin_windowwalker_Desktop { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_Desktop", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Folder windows doesn't run in separate processes. (Klick to open Explorer properties.). + /// + public static string wox_plugin_windowwalker_ExplorerInfoSubTitle { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_ExplorerInfoSubTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Info: Killing the Explorer process isn't possible.. + /// + public static string wox_plugin_windowwalker_ExplorerInfoTitle { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_ExplorerInfoTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kill process. + /// + public static string wox_plugin_windowwalker_Kill { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_Kill", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Your are going to kill the following process:. + /// + public static string wox_plugin_windowwalker_KillMessage { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_KillMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Continue?. + /// + public static string wox_plugin_windowwalker_KillMessageQuestion { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_KillMessageQuestion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kill process confirmation. + /// + public static string wox_plugin_windowwalker_KillMessageTitle { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_KillMessageTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Because this is an app process, all instances of the app will be killed. Continue?. + /// + public static string wox_plugin_windowwalker_KillMessageUwp { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_KillMessageUwp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No.. + /// + public static string wox_plugin_windowwalker_Number { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_Number", resourceCulture); + } + } + /// /// Looks up a localized string similar to Switches between open windows.. /// @@ -78,12 +168,102 @@ namespace Microsoft.Plugin.WindowWalker.Properties { } } + /// + /// Looks up a localized string similar to Process name. + /// + public static string wox_plugin_windowwalker_Process { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_Process", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Process id. + /// + public static string wox_plugin_windowwalker_ProcessId { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_ProcessId", resourceCulture); + } + } + /// /// Looks up a localized string similar to Running. /// - public static string wox_plugin_windowwalker_running { + public static string wox_plugin_windowwalker_Running { get { - return ResourceManager.GetString("wox_plugin_windowwalker_running", resourceCulture); + return ResourceManager.GetString("wox_plugin_windowwalker_Running", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Request confirmation when killing a process. + /// + public static string wox_plugin_windowwalker_SettingConfirmKillProcess { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_SettingConfirmKillProcess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Hide Explorer process information. + /// + public static string wox_plugin_windowwalker_SettingExplorerSettingInfo { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_SettingExplorerSettingInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Hide "kill process" button if additional permissions required. + /// + public static string wox_plugin_windowwalker_SettingHideKillProcess { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_SettingHideKillProcess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Kill process and its child processes. + /// + public static string wox_plugin_windowwalker_SettingKillProcessTree { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_SettingKillProcessTree", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Stay open after closing windows and killing processes (Not working with kill process confirmation). + /// + public static string wox_plugin_windowwalker_SettingOpenAfterKillAndClose { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_SettingOpenAfterKillAndClose", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show only results from visible desktop. + /// + public static string wox_plugin_windowwalker_SettingResultsVisibleDesktop { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_SettingResultsVisibleDesktop", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show desktop name in subtitle (If two or more desktops exist). + /// + public static string wox_plugin_windowwalker_SettingSubtitleDesktopName { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_SettingSubtitleDesktopName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show process id in subtitle. + /// + public static string wox_plugin_windowwalker_SettingSubtitlePid { + get { + return ResourceManager.GetString("wox_plugin_windowwalker_SettingSubtitlePid", resourceCulture); } } } diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.resx b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.resx index 6df18426cf..3fa76d08d8 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.resx +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.resx @@ -123,7 +123,71 @@ Switches between open windows. - + Running + + Request confirmation when killing a process + + + Hide Explorer process information + Explorer is here the program File Explorer + + + Hide "kill process" button if additional permissions required + + + Show only results from visible desktop + + + Show desktop name in subtitle (If two or more desktops exist) + + + Show process id in subtitle + + + Stay open after closing windows and killing processes (Not working with kill process confirmation) + + + Desktop + + + No. + Short version of "Number" + + + Process name + + + Process id + + + Folder windows doesn't run in separate processes. (Klick to open Explorer properties.) + Explorer is here the program File Explorer + + + Info: Killing the Explorer process isn't possible. + Explorer is here the program File Explorer + + + Close window + + + Kill process + + + Your are going to kill the following process: + + + Continue? + + + Kill process confirmation + + + Because this is an app process, all instances of the app will be killed. Continue? + + + Kill process and its child processes + \ No newline at end of file diff --git a/src/modules/launcher/Wox.Infrastructure/Helper.cs b/src/modules/launcher/Wox.Infrastructure/Helper.cs index 96aa63f119..e3d4e92fab 100644 --- a/src/modules/launcher/Wox.Infrastructure/Helper.cs +++ b/src/modules/launcher/Wox.Infrastructure/Helper.cs @@ -126,13 +126,14 @@ namespace Wox.Infrastructure return Process.Start(processStartInfo); } - public static bool OpenInShell(string path, string arguments = null, string workingDir = null, bool runAsAdmin = false) + public static bool OpenInShell(string path, string arguments = null, string workingDir = null, bool runAsAdmin = false, bool runWithHiddenWindow = false) { using (var process = new Process()) { process.StartInfo.FileName = path; process.StartInfo.WorkingDirectory = string.IsNullOrWhiteSpace(workingDir) ? string.Empty : workingDir; process.StartInfo.Arguments = string.IsNullOrWhiteSpace(arguments) ? string.Empty : arguments; + process.StartInfo.WindowStyle = runWithHiddenWindow ? ProcessWindowStyle.Hidden : ProcessWindowStyle.Normal; if (runAsAdmin) { diff --git a/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/CVirtualDesktopManager.cs b/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/CVirtualDesktopManager.cs new file mode 100644 index 0000000000..b15cab0cb9 --- /dev/null +++ b/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/CVirtualDesktopManager.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Runtime.InteropServices; + +namespace Wox.Plugin.Common.VirtualDesktop.Interop +{ + /// + /// Virtual Desktop Manager class + /// Code used from + /// + [ComImport] + [Guid("aa509086-5ca9-4c25-8f95-589d3c07b48a")] + internal class CVirtualDesktopManager + { + } +} diff --git a/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/IVirtualDesktopManager.cs b/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/IVirtualDesktopManager.cs new file mode 100644 index 0000000000..5c6113203e --- /dev/null +++ b/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/IVirtualDesktopManager.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Runtime.InteropServices; + +namespace Wox.Plugin.Common.VirtualDesktop.Interop +{ + /// + /// Interface for accessing Virtual Desktop Manager. + /// Code used from + /// + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("a5cd92ff-29be-454c-8d04-d82879fb3f1b")] + [System.Security.SuppressUnmanagedCodeSecurity] + internal interface IVirtualDesktopManager + { + [PreserveSig] + int IsWindowOnCurrentVirtualDesktop([In] IntPtr hTopLevelWindow, [Out] out int onCurrentDesktop); + + [PreserveSig] + int GetWindowDesktopId([In] IntPtr hTopLevelWindow, [Out] out Guid desktop); + + [PreserveSig] + int MoveWindowToDesktop([In] IntPtr hTopLevelWindow, [MarshalAs(UnmanagedType.LPStruct)][In] Guid desktop); + } +} diff --git a/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VDesktop.cs b/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VDesktop.cs new file mode 100644 index 0000000000..cac6e9dbe5 --- /dev/null +++ b/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VDesktop.cs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +using System; + +namespace Wox.Plugin.Common.VirtualDesktop.Helper +{ + /// + /// Class that represents a Virtual Desktop + /// + /// This class is named VDesktop to make clear it isn't an instance of the original Desktop class from Virtual Desktop Manager. + /// We can't use the original one, because therefore we must access private com interfaces. We aren't allowed to do this, because this is an official Microsoft project. + public class VDesktop + { + /// + /// Gets or sets the guid of the desktop + /// + public Guid Id + { + get; set; + } + + /// + /// Gets or sets the name of the desktop + /// + public string Name + { + get; set; + } + + /// + /// Gets or sets the number (position) of the desktop + /// + public int Number + { + get; set; + } + + /// + /// Gets or sets a value indicating whether the desktop is currently visible to the user + /// + public bool IsVisible + { + get; set; + } + + /// + /// Gets or sets a value indicating whether the desktop guid belongs to the generic "AllDesktops" view. + /// This view hold all windows that are pinned to all desktops. + /// + public bool IsAllDesktopsView + { + get; set; + } + + /// + /// Gets or sets a value indicating the position of a desktop in the list of all desktops + /// + public VirtualDesktopPosition Position + { + get; set; + } + + /// + /// Gets an empty instance of + /// + public static VDesktop Empty + { + get + { + return new VDesktop() + { + Id = Guid.Empty, + Name = string.Empty, + Number = 0, + IsVisible = false, + IsAllDesktopsView = false, + Position = VirtualDesktopPosition.NotApplicable, + }; + } + } + } +} diff --git a/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VirtualDesktopHelper.cs b/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VirtualDesktopHelper.cs new file mode 100644 index 0000000000..fb2aa4cc8b --- /dev/null +++ b/src/modules/launcher/Wox.Plugin/Common/VirtualDesktop/VirtualDesktopHelper.cs @@ -0,0 +1,508 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using Wox.Plugin.Common.VirtualDesktop.Interop; +using Wox.Plugin.Common.Win32; +using Wox.Plugin.Logger; +using Wox.Plugin.Properties; + +namespace Wox.Plugin.Common.VirtualDesktop.Helper +{ + /// + /// Helper class to work with Virtual Desktops. + /// This helper uses only public available and documented COM-Interfaces or informations from registry. + /// + /// + /// To use this helper you have to create an instance of it and access the method via the helper instance. + /// We are only allowed to use public documented com interfaces. + /// + /// Documentation of IVirtualDesktopManager interface + /// CSharp example code for IVirtualDesktopManager + public class VirtualDesktopHelper + { + /// + /// Instance of "Virtual Desktop Manager" + /// + private readonly IVirtualDesktopManager _virtualDesktopManager; + + /// + /// Internal settings to enable automatic update of desktop list. + /// This will be off by default to avoid to many registry queries. + /// + private readonly bool _desktopListAutoUpdate; + + /// + /// List of all available Virtual Desktop in their real order + /// The order and list in the registry is always up to date + /// + private List availableDesktops = new List(); + + /// + /// Id of the current visible Desktop. + /// + private Guid currentDesktop; + + /// + /// Initializes a new instance of the class. + /// + /// Setting to configure if the list of available desktops should update automatically or only when calling . Per default this is set to manual update (false) to have less registry queries. + public VirtualDesktopHelper(bool desktopListUpdate = false) + { + try + { + _virtualDesktopManager = (IVirtualDesktopManager)new CVirtualDesktopManager(); + } + catch (COMException ex) + { + Log.Exception("Failed to create an instance of COM interface .", ex, typeof(VirtualDesktopHelper)); + return; + } + + _desktopListAutoUpdate = desktopListUpdate; + UpdateDesktopList(); + } + + /// + /// Gets a value indicating whether the Virtual Desktop Manager is initialized successfully + /// + public bool VirtualDesktopManagerInitialized + { + get { return _virtualDesktopManager != null; } + } + + /// + /// Method to update the list of Virtual Desktops from Registry + /// The data in the registry are always up to date + /// + public void UpdateDesktopList() + { + // List of all desktops + RegistryKey allDeskSubKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VirtualDesktops", false); + byte[] allDeskValue = (byte[])allDeskSubKey.GetValue("VirtualDesktopIDs"); + availableDesktops.Clear(); + + if (allDeskValue != null) + { + // Each guid has a length of 16 elements + int numberOfDesktops = allDeskValue.Length / 16; + + for (int i = 0; i < numberOfDesktops; i++) + { + byte[] guidArray = new byte[16]; + Array.ConstrainedCopy(allDeskValue, i * 16, guidArray, 0, 16); + availableDesktops.Add(new Guid(guidArray)); + } + } + else + { + Log.Error("Failed to read the list of existing desktops form registry.", typeof(VirtualDesktopHelper)); + } + + // Guid for current desktop + int userSessionId = Process.GetCurrentProcess().SessionId; + RegistryKey currentDeskSubKey = Registry.CurrentUser.OpenSubKey($"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SessionInfo\\{userSessionId}\\VirtualDesktops", false); + var currentDeskValue = currentDeskSubKey.GetValue("CurrentVirtualDesktop"); + if (currentDeskValue != null) + { + currentDesktop = new Guid((byte[])currentDeskValue); + } + else + { + // The registry value is missing when the user hasn't switched the desktop at least one time before reading the registry. In this case we can set it to desktop one. + Log.Debug("Failed to read the id for the current desktop form registry.", typeof(VirtualDesktopHelper)); + currentDesktop = availableDesktops[0]; + } + } + + /// + /// Returns an ordered list with the ids of all existing desktops. The list is ordered in the same way as the existing desktops. + /// + /// List of desktop ids or an empty list on failure. + public List GetDesktopIdList() + { + if (_desktopListAutoUpdate) + { + UpdateDesktopList(); + } + + return availableDesktops; + } + + /// + /// Returns an ordered list with of all existing desktops and their properties. The list is ordered in the same way as the existing desktops. + /// + /// List of desktops or an empty list on failure. + public List GetDesktopList() + { + if (_desktopListAutoUpdate) + { + UpdateDesktopList(); + } + + List list = new List(); + foreach (Guid d in availableDesktops) + { + list.Add(CreateVDesktopInstance(d)); + } + + return list; + } + + /// + /// Returns the count of existing desktops + /// + /// Number of existing desktops or zero on failure. + public int GetDesktopCount() + { + if (_desktopListAutoUpdate) + { + UpdateDesktopList(); + } + + return availableDesktops.Count; + } + + /// + /// Returns the id of the desktop that is currently visible to the user. + /// + /// Guid of the current desktop or an empty guid on failure. + public Guid GetCurrentDesktopId() + { + if (_desktopListAutoUpdate) + { + UpdateDesktopList(); + } + + return currentDesktop; + } + + /// + /// Returns an instance of for the desktop that is currently visible to the user. + /// + /// An instance of for the current desktop, or an empty instance of on failure. + public VDesktop GetCurrentDesktop() + { + if (_desktopListAutoUpdate) + { + UpdateDesktopList(); + } + + return CreateVDesktopInstance(currentDesktop); + } + + /// + /// Checks if a desktop is currently visible to the user. + /// + /// The guid of the desktop to check. + /// A value indicating if the guid belongs to the currently visible desktop. + public bool IsDesktopVisible(Guid desktop) + { + if (_desktopListAutoUpdate) + { + UpdateDesktopList(); + } + + return currentDesktop == desktop; + } + + /// + /// Returns the number (position) of a desktop. + /// + /// The guid of the desktop. + /// Number of the desktop, if found. Otherwise a value of zero. + public int GetDesktopNumber(Guid desktop) + { + if (_desktopListAutoUpdate) + { + UpdateDesktopList(); + } + + // Adding +1 because index starts with zero and humans start counting with one. + return availableDesktops.IndexOf(desktop) + 1; + } + + /// + /// Returns the name of a desktop + /// + /// Guid of the desktop + /// Returns the name of the desktop or an empty string on failure. + public string GetDesktopName(Guid desktop) + { + if (desktop == Guid.Empty || !GetDesktopIdList().Contains(desktop)) + { + Log.Debug($"GetDesktopName() failed. Parameter contains an invalid desktop guid ({desktop}) that doesn't belongs to an available desktop. Maybe the guid belongs to the generic 'AllDesktops' view.", typeof(VirtualDesktopHelper)); + return string.Empty; + } + + // If the desktop name was not changed by the user, it isn't saved to the registry. Then we need the default name for the desktop. + var defaultName = string.Format(Resources.VirtualDesktopHelper_Desktop, GetDesktopNumber(desktop)); + + string registryPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VirtualDesktops\\Desktops\\{" + desktop.ToString().ToUpper() + "}"; + RegistryKey deskSubKey = Registry.CurrentUser.OpenSubKey(registryPath, false); + var desktopName = deskSubKey?.GetValue("Name"); + + return (desktopName != null) ? (string)desktopName : defaultName; + } + + /// + /// Returns the position type for a desktop. + /// + /// Guid of the desktop. + /// Type of desktop position. + public VirtualDesktopPosition GetDesktopPositionType(Guid desktop) + { + int desktopNumber = GetDesktopNumber(desktop); + int desktopCount = GetDesktopCount(); + + if (desktopNumber == 1) + { + return VirtualDesktopPosition.FirstDesktop; + } + else if (desktopNumber == desktopCount) + { + return VirtualDesktopPosition.LastDesktop; + } + else if (desktopNumber > 1 & desktopNumber < desktopCount) + { + return VirtualDesktopPosition.BetweenOtherDesktops; + } + else + { + return VirtualDesktopPosition.NotApplicable; + } + } + + /// + /// Returns the desktop id for a window. + /// + /// Handle of the window. + /// The guid of the desktop, where the window is shown. + /// HResult of the called method. + public int GetWindowDesktopId(IntPtr hWindow, out Guid desktopId) + { + if (_virtualDesktopManager == null) + { + Log.Error("GetWindowDesktopId() failed: The instance of isn't available.", typeof(VirtualDesktopHelper)); + desktopId = Guid.Empty; + return unchecked((int)HRESULT.E_UNEXPECTED); + } + + return _virtualDesktopManager.GetWindowDesktopId(hWindow, out desktopId); + } + + /// + /// Returns an instance of for the desktop where the window is assigned to. + /// + /// Handle of the window. + /// An instance of for the desktop where the window is assigned to, or an empty instance of on failure. + public VDesktop GetWindowDesktop(IntPtr hWindow) + { + if (_virtualDesktopManager == null) + { + Log.Error("GetWindowDesktopId() failed: The instance of isn't available.", typeof(VirtualDesktopHelper)); + return CreateVDesktopInstance(Guid.Empty); + } + + int hr = _virtualDesktopManager.GetWindowDesktopId(hWindow, out Guid desktopId); + return (hr != (int)HRESULT.S_OK || desktopId == Guid.Empty) ? VDesktop.Empty : CreateVDesktopInstance(desktopId, hWindow); + } + + /// + /// Returns the desktop assignment type for a window. + /// + /// Handle of the window. + /// Type of . + public VirtualDesktopAssignmentType GetWindowDesktopAssignmentType(IntPtr hWindow) + { + if (_virtualDesktopManager == null) + { + Log.Error("GetWindowDesktopAssignmentType() failed: The instance of isn't available.", typeof(VirtualDesktopHelper)); + return VirtualDesktopAssignmentType.Unknown; + } + + _ = _virtualDesktopManager.IsWindowOnCurrentVirtualDesktop(hWindow, out int isOnCurrentDesktop); + int hResult = GetWindowDesktopId(hWindow, out Guid windowDesktopId); + + if (hResult != (int)HRESULT.S_OK) + { + return VirtualDesktopAssignmentType.Unknown; + } + else if (windowDesktopId == Guid.Empty) + { + return VirtualDesktopAssignmentType.NotAssigned; + } + else if (isOnCurrentDesktop == 1 && !GetDesktopIdList().Contains(windowDesktopId)) + { + // These windows are marked as visible on the current desktop, but the desktop id doesn't belongs to an existing desktop. + // In this case the desktop id belongs to the generic view 'AllDesktops'. + return VirtualDesktopAssignmentType.AllDesktops; + } + else if (isOnCurrentDesktop == 1) + { + return VirtualDesktopAssignmentType.CurrentDesktop; + } + else + { + return VirtualDesktopAssignmentType.OtherDesktop; + } + } + + /// + /// Returns a value indicating if the window is assigned to a currently visible desktop. + /// + /// Handle to the top level window. + /// True if the desktop with the window is visible or if the window is assigned to all desktops. False if the desktop is not visible and on failure, + public bool IsWindowOnVisibleDesktop(IntPtr hWindow) + { + return GetWindowDesktopAssignmentType(hWindow) == VirtualDesktopAssignmentType.CurrentDesktop || GetWindowDesktopAssignmentType(hWindow) == VirtualDesktopAssignmentType.AllDesktops; + } + + /// + /// Returns a value indicating if the window is cloaked by VirtualDesktopManager. + /// (A cloaked window is not visible to the user. But the window is still composed by DWM.) + /// + /// Handle of the window. + /// A value indicating if the window is cloaked by Virtual Desktop Manager, because it is moved to an other desktop. + public bool IsWindowCloakedByVirtualDesktopManager(IntPtr hWindow) + { + // If a window is hidden because it is moved to an other desktop, then DWM returns type "CloakedShell". If DWM returns an other type the window is not cloaked by shell or VirtualDesktopManager. + _ = NativeMethods.DwmGetWindowAttribute(hWindow, (int)DwmWindowAttributes.Cloaked, out int dwmCloakedState, sizeof(uint)); + return GetWindowDesktopAssignmentType(hWindow) == VirtualDesktopAssignmentType.OtherDesktop && dwmCloakedState == (int)DwmWindowCloakStates.CloakedShell; + } + + /// + /// Moves the window to a specific desktop. + /// + /// Handle of the top level window. + /// Guid of the target desktop. + /// True on success and false on failure. + public bool MoveWindowToDesktop(IntPtr hWindow, in Guid desktopId) + { + if (_virtualDesktopManager == null) + { + Log.Error("MoveWindowToDesktop() failed: The instance of isn't available.", typeof(VirtualDesktopHelper)); + return false; + } + + int hr = _virtualDesktopManager.MoveWindowToDesktop(hWindow, desktopId); + if (hr != (int)HRESULT.S_OK) + { + Log.Exception($"Failed to move the window ({hWindow}) to an other desktop ({desktopId}).", Marshal.GetExceptionForHR(hr), typeof(VirtualDesktopHelper)); + return false; + } + + return true; + } + + /// + /// Move a window one desktop left. + /// + /// Handle of the top level window. + /// True on success and false on failure. + public bool MoveWindowOneDesktopLeft(IntPtr hWindow) + { + if (GetWindowDesktopAssignmentType(hWindow) == VirtualDesktopAssignmentType.Unknown || GetWindowDesktopAssignmentType(hWindow) == VirtualDesktopAssignmentType.NotAssigned) + { + return false; + } + + int hr = GetWindowDesktopId(hWindow, out Guid windowDesktop); + if (hr != (int)HRESULT.S_OK) + { + Log.Error($"Failed to move the window ({hWindow}) one desktop left: Can't get current desktop of the window.", typeof(VirtualDesktopHelper)); + return false; + } + + int windowDesktopNumber = GetDesktopIdList().IndexOf(windowDesktop); + if (windowDesktopNumber == 1) + { + Log.Error($"Failed to move the window ({hWindow}) one desktop left: The window is on the first desktop.", typeof(VirtualDesktopHelper)); + return false; + } + + Guid newDesktop = availableDesktops[windowDesktopNumber - 1]; + return MoveWindowToDesktop(hWindow, newDesktop); + } + + /// + /// Move a window one desktop right. + /// + /// Handle of the top level window. + /// True on success and false on failure. + public bool MoveWindowOneDesktopRight(IntPtr hWindow) + { + if (GetWindowDesktopAssignmentType(hWindow) == VirtualDesktopAssignmentType.Unknown || GetWindowDesktopAssignmentType(hWindow) == VirtualDesktopAssignmentType.NotAssigned) + { + return false; + } + + int hr = GetWindowDesktopId(hWindow, out Guid windowDesktop); + if (hr != (int)HRESULT.S_OK) + { + Log.Error($"Failed to move the window ({hWindow}) one desktop right: Can't get current desktop of the window.", typeof(VirtualDesktopHelper)); + return false; + } + + int windowDesktopNumber = GetDesktopIdList().IndexOf(windowDesktop); + if (windowDesktopNumber == GetDesktopCount()) + { + Log.Error($"Failed to move the window ({hWindow}) one desktop right: The window is on the last desktop.", typeof(VirtualDesktopHelper)); + return false; + } + + Guid newDesktop = availableDesktops[windowDesktopNumber + 1]; + return MoveWindowToDesktop(hWindow, newDesktop); + } + + /// + /// Returns an instance of VDesktop for a Guid. + /// + /// Guid of the desktop. + /// Handle of the window shown on the desktop. If this parameter is set we can detect if it is the AllDesktops view. + /// VDesktop instance. + private VDesktop CreateVDesktopInstance(Guid desktop, IntPtr hWindow = default) + { + // Can be only detected if method is invoked with window handle parameter. + bool isAllDesktops = (hWindow != default) && GetWindowDesktopAssignmentType(hWindow) == VirtualDesktopAssignmentType.AllDesktops; + + return new VDesktop() + { + Id = desktop, + Name = isAllDesktops ? Resources.VirtualDesktopHelper_AllDesktops : GetDesktopName(desktop), + Number = GetDesktopNumber(desktop), + IsVisible = IsDesktopVisible(desktop) || isAllDesktops, + IsAllDesktopsView = isAllDesktops, + Position = GetDesktopPositionType(desktop), + }; + } + } + + /// + /// Enum to show in which way a window is assigned to a desktop + /// + public enum VirtualDesktopAssignmentType + { + Unknown = -1, + NotAssigned = 0, + AllDesktops = 1, + CurrentDesktop = 2, + OtherDesktop = 3, + } + + /// + /// Enum to show the position of a desktop in the list of all desktops + /// + public enum VirtualDesktopPosition + { + FirstDesktop, + BetweenOtherDesktops, + LastDesktop, + NotApplicable, + } +} diff --git a/src/modules/launcher/Wox.Plugin/Common/Win32/NativeMethods.cs b/src/modules/launcher/Wox.Plugin/Common/Win32/NativeMethods.cs index 1e52ea4ea0..9f8b08c4a7 100644 --- a/src/modules/launcher/Wox.Plugin/Common/Win32/NativeMethods.cs +++ b/src/modules/launcher/Wox.Plugin/Common/Win32/NativeMethods.cs @@ -135,6 +135,11 @@ namespace Wox.Plugin.Common.Win32 /// Restores the window to its normal position and size. /// public const int SC_RESTORE = 0xf120; + + /// + /// Closes the window + /// + public const int SC_CLOSE = 0xF060; } public enum HRESULT : uint diff --git a/src/modules/launcher/Wox.Plugin/Properties/Resources.Designer.cs b/src/modules/launcher/Wox.Plugin/Properties/Resources.Designer.cs index 13e4320c1e..ee8e8c9c45 100644 --- a/src/modules/launcher/Wox.Plugin/Properties/Resources.Designer.cs +++ b/src/modules/launcher/Wox.Plugin/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Wox.Plugin.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { @@ -77,5 +77,23 @@ namespace Wox.Plugin.Properties { return ResourceManager.GetString("FailedToLoadPluginTitle", resourceCulture); } } + + /// + /// Looks up a localized string similar to On all Desktops. + /// + public static string VirtualDesktopHelper_AllDesktops { + get { + return ResourceManager.GetString("VirtualDesktopHelper_AllDesktops", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Desktop {0}. + /// + public static string VirtualDesktopHelper_Desktop { + get { + return ResourceManager.GetString("VirtualDesktopHelper_Desktop", resourceCulture); + } + } } } diff --git a/src/modules/launcher/Wox.Plugin/Properties/Resources.resx b/src/modules/launcher/Wox.Plugin/Properties/Resources.resx index 469e7716b1..595542f0ed 100644 --- a/src/modules/launcher/Wox.Plugin/Properties/Resources.resx +++ b/src/modules/launcher/Wox.Plugin/Properties/Resources.resx @@ -122,5 +122,14 @@ Fail to Load {0} Plugin + Do not translate '{0}' as this is a place holder and will be converted in code. + + + On all Desktops + The window is shown on all desktops. + + + Desktop {0} + Default name for virtual desktops. Do not translate '{0}' as this is a place holder and will be converted in code. \ No newline at end of file