* add test case and fix bug
* add test
* add test
* add test
* add test case
* add fancyzones window name and fix test case error
* add test case
* add test case
* add test case After creating a virtual desktop
* add test case delete layout
* add test case grid layout change monitor resolution
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error and only run fancyzone uitest
* disable other ui test code
* fix build error
* fix pipeline error
* fix pipeline error
* add restart scope exe
* enable other test code
* fix Spelling error
* add error log
* add global find
* Change Fancyzone SendKey function
* add Fancyzone Editor Test case message
* add test code
* drag code refine
* add windowHelper
* fix find element type error
* fix build error
* fix test error
* fix pipeline error
* fix pipeline error
* fix pipeline error
---------
Co-authored-by: Zhaopeng Wang (from Dev Box) <zhaopengwang@microsoft.com>
* empowering users to maximize OOBE to their heart desire (#37823)
empowering users to maximize to their heart desire
* [Bug report] - Auto fill bug report parameters. (#37991)
* [cmdpal] fix a broken link in README.md (#38714)
related issue: #38713
* [cmdpal] Add Open URL fallback command for WebSearch ext (#38685)
## Summary of the Pull Request
1. Add new fallback command for websearch
https://github.com/user-attachments/assets/39362d66-db59-42d4-b07c-7bfd60b2e420
## PR Checklist
- [x] **Closes:** #38497
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* [CmdPal] Tray icon settings (#38672)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
## Summary of the Pull Request
Added a settings to enable/disable the system tray icon (enabled by default).
Adopter the term "system tray icon" for consistency with Windows 11 settings.
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] **Closes:** #38407
* Add Zhiwei as part of PowerToys! (#38744)
* Add Zhiwei as part of PowerToys!
* Fix the expect.txt for Zhiwei
* Fix the case problem on expect.txt zhiwei => Zhiwei
* [PowerToysRun][Docs] Add QuickNotes to Third-Party plugins (#38663)
* Add QuickNotes plugin to third-party Run plugins documentation
* chore: add ruslanlap to spelling allow-list
* chore: add ruslanlap to spelling allow-list
* chore: add ruslanlap to spelling allow-list
* Add ruslanlap to allowed names and remove from expected words list
* Add securityContext to configuration files (#38017)
For the winget DSC, Setting developer mode, installing Visual Studio 2022 & fetching and installing VS components all require elevation. Added securityContext: elevated for these resources. These configurations can now be invoked from user context, and will prompt for a single UAC to run resources that require elevation in a separate process.
* Change log extension from .txt => .log (#33813)
* Change log extension
From .txt to .log
* Also add workspace logs
---------
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
* [KeyboardManager] Fix modifier Key (Not right or left) stuck (#37930)
* Fix ctr,alt,shift getting stuck
* more changes
* Update src/modules/keyboardmanager/common/Helpers.h
Co-authored-by: Hao Liu <liuhaobupt@163.com>
---------
Co-authored-by: Hao Liu <liuhaobupt@163.com>
* "ǔ" changed to "ŭ" in GetDefaultLetterKeyEPO (#37791)
* Fix Color Picker resource leak (#38122) (#38147)
* Fix Color Picker resource leak (#38122)
Added a using statement to properly dispose of the Graphics object created from the Bitmap. This fixes resource leak.
* Fix CI complain
* Update MouseInfoProvider.cs
fix whitespace
---------
Co-authored-by: Kai Tao <69313318+vanzue@users.noreply.github.com>
* Upgrading some of the Testing framework items (#38779)
* starting to get some of the baseline
* Update NOTICE.md
* Upgrading streamjson gets the others on same version of newtonsoft.json
* Update PowerToys.Settings.csproj
* Update NOTICE.md
* upgrading to adjust fix vulnerability (#38784)
* upgrading to adjust fix vulnerablitlity
* Update NOTICE.md
* Update NuGet packages in NOTICE.md
* [PowerToysRun][Docs] Add Weather and Pomodoro to Third-Party plugins (#38760)
* [PowerToysRun][Docs] Add Weather and Pomodoro to Third-Party plugins
* [Spell-check] Add ruslanlap to allowed names and update expect.txt
* Update expect.txt
* Update names.txt
* Update names.txt
* Update names.txt
* Update names.txt
* [ColorPicker]Only close on escape if focused (#37895)
* [cmdpal] Setting a new alias should remove the old one (#38193)
* [cmdpal] Fix alias update
* Fix the command palette extension alias update issue
* clean code
---------
Co-authored-by: vanzue <vanzue@outlook.com>
* Apply security best practices for GitHub Actions / Dependency (#38552)
This update aligns with Microsoft's security guidelines by pinning all GitHub Action tags and Docker tags to their full-length commits. This practice ensures immutability and reduces the risk of supply chain attacks. Note that 1st and 2nd party actions do not require hash pinning.
* Rename the `[Ee]xts` dir to `ext` (#38852)
**WARNING:** This PR will probably blow up all in-flight PRs
at some point in the early days of CmdPal, two of us created seperate
`Exts` and `exts` dirs. Depending on what the casing was on the branch
that you checked one of those out from, it'd get stuck like that on your
PC forever.
Windows didn't care, so we never noticed.
But GitHub does care, and now browsing the source on GitHub is basically
impossible.
Closes#38081
* Upgrading Boost dependencies (#38782)
Upgrading Boost
* upgrading toolkit + suppressing warnings (#38746)
* upgrade toolkit to latest
* supressing warnings
* Update expect.txt
making generic
* Update suppression comments for AOT compatibility
* Fix case for 'MVVMTK' in spell-check file
* Update NOTICE.md
* [CNF] Only enable experimental features if they exist (#37690)
* [PowerRename] Add 12-hour time format patterns with AM/PM support (#30703) (#38723)
* [PowerRename][Feature] Add new date/time formatting patterns to GetDatedFileName
* [PowerRename][UI] Add date/time shortcut patterns to cheat sheet
* [PowerRename][Tests] Add tests for new date/time formatting patterns
* [PowerRename] [Refactor] Simplify AM/PM string handling in time patterns
* [cmdpal] Fix empty file name issue when create new ext in "Create New Extension" command. (#38864)
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* [QuickAccent] Fix on-screen keyboard activation (#37581)
* fix on-screen keyboard activation
* cleanup
* CmdPal: Add low-level keyboard hook for global hotkey (#38250)
Adds the ability to make the global CmdPal hotkey a low-level hook. This is needed for `win+space`, `win+r`, et al.
I've only added this to the root hotkey. Other hotkeys will still use the normal `RegisterHotkey` ones. We can re-evaluate this for 0.2+.
Originally: https://github.com/zadjii-msft/PowerToys/issues/349
Solves: https://github.com/microsoft/PowerToys/issues/38297
---------
Co-authored-by: Mike Griese <migrie@microsoft.com>
* Adds support for JUMBO thumbnails in the helper (#38539)
Adds a parameter to `Toolkit.ThumbnailHelper.GetThumbnail` to retrieve the largest possible icon from the file. For most use cases, the normal icon size will be good for list items and page icons.
But for details, you'll want to use the JUMBO icons, and to retrieve them, we need to get the icon from a different API.
As a drive-by, I also have us fetching the highest-res app icon for UWP's rather than the lowest-res icon.
Solves #38238
Screenshots:
| before | after |
| ------ | ----- |
|  |  |
|  |  |
* [PowerToysRun] Add version info to plugin error messages (#38491)
* changes
* fix resx
* Don't auto-hide when an MSAL dialog is opened on us (#38850)
Apps that want to show MSAL dialogs on the Command Palette would explode if they passed CmdPal's HWND to WithParentActivityOrWindow. It's not entirely clear why, but MSAL would explode if the parent HWND is hidden.
When the MSAL dialog opened, we'd hide ourselves, and badda bing, badda boom, the extension would crash.
MSAL dialogs will set us to WS_DISABLED right before the dialog is opened. Easy solution. Don't hide ourselves, if we're disabled.
Helps some friends not depend on the existence of Teams :P
* Immediately select search text on opening page (#38842)
closes#38712closes#38315
related to #38379 (and might sufficiently close that too)
This immediately selects the search text when a page is loaded.

* Update the settings form when ext settings are saved (#38851)
This one was subtle - the Settings class in the toolkit didn't ever change the items for a SettingsContentPage. For the main settings window, this was problematic. It would only ever hang onto one instance of that CommandSettings.SettingsContentPage, and never re-retrieve the value from it.
This fixes that issue, by making sure to raise an ItemsChanged in the settings changed handler, so that we automatically pull down the new settings forms.
For settings that were added to commands, as a context item, this wasn't an issue. They were always returning new forms to the host, with the current settings values in it.
Closes#38191
* Powertoys for Linear plugin added (#38883)
* Update thirdPartyRunPlugins.md
* Update names.txt
---------
Co-authored-by: Clint Rutkas <clint@rutkas.com>
* [cmdpal] Run cmdpalette from runner locally (#38725)
* empowering users to maximize OOBE to their heart desire (#37823)
empowering users to maximize to their heart desire
* resume main
* Trust selfsign cert in localmachine\root to make msix available
* minor fix
* retry signing
---------
Co-authored-by: Clint Rutkas <clint@rutkas.com>
* [cmdpal] Port v1 calculator extension (#38629)
* init
* update
* Remove duplicated cp command
* Change the long desc
* Update notice.md
* Use the same icon for fallback item
* Add Rappl to expect list
* update notice.md
* Move the original order back.
* Make Radians become default choice
* Fix empty result
* Remove unused settings.
Move history back.
Refactory the query logic
* fix typo
* merge main
* CmdPal: minor calc updates (#38914)
A bunch of calc updates
* maintain the visibility of the history
* add other formats to the context menu #38708
* some other icon tidying
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Mike Griese <migrie@microsoft.com>
* Add the list item requested shortcuts back (#38573)
* [x] Re-adds the context menu shortcut text
* [x] Hooks up the keybindings to the search box so that you can just press the keys while you have an item selected, and do a context command
* [x] Hook these keybindings up to the context flyout itself
* [x] Adds a sample for testing
Solves #38271
* [CmdPal] A11y improvements (#38840)
This PR introduces the following changes:
- Adding the right a11y labels - as a result, Accesibility Insights is no longer flagging any errors: https://github.com/microsoft/PowerToys/issues/38395
- Removing and tweaking a few animations, addressing: https://github.com/microsoft/PowerToys/issues/38438
- Localization improvements
* [CmdPalette > Time and Date] Custom formats (Port #37743) and other plugin improvements - 2 (#38952)
* port changes from broken PR
* fixes
* fix formatting
* [cmdpal] Add fallback item for system command. (#38865)
* init
* Remove unused cache
* merge main
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* [CmdPal] Fixed#38961 (#38988)
* [CmdPal] Fixed#38961
* [CmdPal] Fixed#38961
* [CmdPal] Fix#38961 Wrong Message for "Open Recycle Bin" Command
* [CmdPal] Fix#38961 Wrong Message for "Open Recycle Bin" Command
---------
Co-authored-by: Aung Khaing Khant <aungkhaingkhant@advent-soft.com>
* [RegPreview] Init with header and add NEW button (#37626)
* default value
* add new button
* fix tool tip
* update button symbol
* feedback changes
* spellcheck
* Fix build break because of miss Signing for new files (#39014)
* Add CmdPalKeyboardService.dll as part of sign
* Move 3rd party signing to another section
* release: don't publish private symbols for 100 years (#39015)
* [ImageResizer]Fix: Deleting an Image Resizer preset deletes the wrong preset (#38476)
* [ImageResizer]Fix: Deleting an Image Resizer preset deletes the wrong preset
* update the helper
* sort items
* [PowerAccent] Cancel previous ShowToolbar task if a new one is triggered (#37757)
* Cancel previous ShowToolbar task if a new one is triggered
* more changes
* Fix space trigger starting at center
* Removed unneded code
* More changes
* Addressed feedback
* Fix another edge case
* [cmdpal] Add setting "ignore hotkey when full screen" (#38923)
* init
* merge main
* merge main
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* [Workspaces]Fix for steam games capture&launch: capture and correctly launch steam games. (#38380)
* Workspaces fix: capture steam games.
* minor fix
* Launch steam apps by url appmodeluserid instead of directly exe call.
* fix copilot comment
* fix
* remove unnecessary string
* expect words
* white list words
* Order of alphabet
* exclude thin frame if it's not a steam game.
* fix build
* fix regression
* adjust comment
* [Fuzzing] Add PowerRename Fuzzing and C++ Project Setup Guidance (#38922)
* add fuzz
* update solution
* update pipeline
* update solution
* remove arm64
* use reference
* revert the code
* add fuzzing readme
* update solution
* fix spell-check
* Parent reference don't need update
* remove fuzzing config
* add debug config
* update the config
* [CmdPal] Hide commands that shouldn't be visible (#39011)
hide commands from more commands
* [CmdPal] Tweaks to the detailspane UX (#38972)
Details pane UX tweaks. Closes: https://github.com/microsoft/PowerToys/issues/38973
Before:

After:

* [CmdPal] Better support for long labels in empty content and commandbar (#38974)
Closes: #38970
Before:
<img width="605" alt="image" src="https://github.com/user-attachments/assets/8310e08f-c471-4663-9000-bfd1eb8c99f3" />
After:
<img width="514" alt="image" src="https://github.com/user-attachments/assets/b1e4c5f6-cd6b-42b2-9a23-3e1e3642202a" />
* CmdPal: Tidy up some winget experiences (#38174)
I'm filing this so that I don't lose it on this machine I use less often. We can probably hold it out of 0.90
Fixes:
* If a package is installed, we always display the version as "Unknown"
* also deals with a case where getting the package metadata could fail, and we'd hide the list item. That's only possible in the "installed, no updates available" case
* Allow package updates, add an icon for updates
* moves off the preview winget API onto a higher stable version
* Fully initialize context menus when they change (#38998)
If we don't slow-initialize the whole menu when it changes, then we won't see that there's secondary (& more) commands.
Tested this with the extension from [waaverecords/CmdPal.Ext.Spotify#4](https://github.com/waaverecords/CmdPal.Ext.Spotify/pull/4)
Closes#38959
Also seemingly closes#38347 - seems that needed additional bumping of the `EmptyContent`'s
* Pre-creation of generated folder for any csproj (#39018)
* Test for Precreation of generated folder for any csproj to prevent random build break
* Update to WinAppSDK 1.7 latest version (#39016)
* Update to WinAppSDK 1.7 latest version
* Update UpdateVersions.ps1
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Dustin L. Howett <dustin@howett.net>
Co-authored-by: Shawn Yuan <128874481+shuaiyuanxx@users.noreply.github.com>
Co-authored-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>
* upgrade the boost dependencies for Fuzzing Project (#39057)
* [CmdPal] Added fallback for time and date (#38918)
* Added fallback for time and date
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* only support week/now/time/year query
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* Add week option
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* Changed setting for time date fallback.
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* update globalization string
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* use week of year.
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* update
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
---------
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* [cmdpal] Ref to AotCompatibility in some cmdpal project. (#39061)
* Ref to AotCompatibility
* Typo issue
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* [Settings] Fix null CmdPal HotKey crash (#39052)
fixed null cmdpal hotkey crash when settings.json not exists or not define hotkey
* Add support for filterable, nested context menus (#38776)
_targets #38573_
At first I just wanted to add support for nested context menus.
But then I also had to add a search box, so the focus wouldn't get weird.
End result:

This gets rid of the need to have the search box and the command bar both track item keybindings - now it's just in the command bar.
Closes#38299Closes#38442
* [Tool] Script to build an installer locally (#39017)
* add script to build a installer
* minor fix
* fix search path for msix file
* fix sign
* fix sign
* fix spelling
* Fix powershell5 can't recognize emoji
* ensure-wix
* bring cmdpal available during local build
* remove early quit
* fix marco
* add logger
* doc
* add a note
* self review
* fix macro def
* add functionality to export cert so that other machine can install it.
* spelling
* 37405 Advanced Paste: Image To Text doesn't work with English (Canada) (#37806)
* [AdvancedPaste] [Fix Bug] Create ocrEngine from user profile language
GetOCRLanguage may fail based on language tag not matching (en-CA does not match en-GB or en-US), however user profile language may be valid.
* Update exception message.
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* update
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
---------
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* Color Picker: add Oklab and Oklch color formats (#38052)
* Resolve Resources.resw conflict
* Update CIE LCh chroma practical upper bound according to CSS spec
* Add review suggestions
* Add WIP tests (lch and oklch do not pass yet)
* Deduplicate Lab to LCh converter method
* Update expect.txt
* Fix liberty test color
* Reimplement oklab with better precision
* Remove CIE LCh
* Add tooltip for color param descriptions
* Update spell-check expect.txt with new words
* Remove 'cielch' and 'lch' from expect.txt
---------
Co-authored-by: Gordon Lam (SH) <yeelam@microsoft.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>
Co-authored-by: Shawn Yuan <128874481+shuaiyuanxx@users.noreply.github.com>
* [PTRun] Allow preventing usage based ordering results (#37491)
* Allow preventing selected result data retrieval
* Updated implementation to calculate sort order on result and update property name to better reflect purpose
* Update Result.cs sort order method name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* Align with the name GetSortOrderScore
---------
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
Co-authored-by: Gordon Lam (SH) <yeelam@microsoft.com>
* [cmdpal] [AOT] make Clipboard/System/WebSearch/WindowsSettings ext become AOT compatible. (#39080)
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* Update the ADO path for tsa.json (#39079)
The previous ADO area path for Powertoys was gone, we need to update to new one.
* Start progress on AoT. (#39051)
* starting AoT flag push
* Few more
* bookmarks
* Really? The VM project compiles?
* Disable publish AOT before we really testing it.
---------
Co-authored-by: Mike Griese <migrie@microsoft.com>
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* [CmdPal] Launch cmd pal with retry (#39039)
* Add Retry when enable
* Add correct for the checking logic
* Retry in another thread (#39042)
* launch thread
* dev
* fix a thread safety
* improve
* improve
* make code clear
* Fix comment
* fix comment
* improve
* self review
* fix & log
* silent fail if not reach 10 times
* fix a ci build flag error
* fix a macro
* some simple improve
---------
Co-authored-by: Gordon Lam (SH) <yeelam@microsoft.com>
* [cmdpal][aot] Remove some unused file in CmdPal.Common and mark it as AOT compatible. (#39110)
* Remove unused com interface
* Remove unused file
* Remove unused file
* Remove unused file
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* Wait to update SearchText until we've actually updated SearchText (#39093)
Closes#38829
If we always UpdateProperty here, then there's a possible
race condition, where we raise the PropertyChanged(SearchText)
before the subclass actually retrieves the new SearchText from the
model. In that race situation, if the UI thread handles the
PropertyChanged before ListViewModel fetches the SearchText, it'll
think that the old search text is the _new_ value.
* [Tool] Delete export pfx function to remove use of hard coded password (#39144)
don't need export pfx functionality
* [cmdpal] Support search any file in fallback command (#38455)
## Summary of the Pull Request
1. Add new setting to control this behaviour
2. Support always on and only when file exist in the fallback command
3. Change the condition of updateFallbackCommand in toplevelvm
demo:
https://github.com/user-attachments/assets/19e4ced3-30ad-44f4-8f3a-93620f46bb3d
## PR Checklist
- [x] **Closes:** #38370
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Mike Griese <migrie@microsoft.com>
* [cmdpal][AOT] clean up some AOT related issue (#39163)
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* Fix for missing CmdPal extensions docs (#39173)
* CmdPal: Start extensions in parallel (#39203)
This reduces our extension startup time by approximately 70% on my
machine (I have 17 extensions). I'd guess the gains scale with the
number of extensions. That's 8s -> 3s on average, and now I also get 2.5s reloads.
This retains the order of the list of extensions, by only starting the
processes in parallel. Once we have all the command provider instances,
then actually retrieving the commands.
It also adds a timeout on startup & load, so that one misbehaving extension won't block everyone else.
closes: #38529
* [Infra-BuildScript] Add PowerShell Script to Enforce Shared Common.Dotnet.CsWinRT.props in all CSharp Projects under Src Sub-Folder (#37811)
* Add Powershell script to validate whether CSharp project correctly import shared props, update pipeline to enforce such validation, and fixed all projects that didn't import this shared props correctly
* add common props for fuzz test project
* update the path
* Only scans projects in src sub-folder
* Update .pipelines/verifyCommonProps.ps1
* Update csproj to include Common.Dotnet.CsWinRT.props
* Fix indentation in RegistryPreview.FuzzTests.csproj
* exclude TemplateCmdPalExtension.csproj in validation process
* exclude TemplateCmdPalExtension.csproj in validation process
---------
Co-authored-by: Leilei Zhang <leilzh@microsoft.com>
Co-authored-by: Jerry Xu <nxu@microsoft.com>
* Dismiss the details pane when the list gets emptied (#39206)
I cannot find an issue for this. I swear I filed it somewhere.
If you open winget, search for "terminal", wait till it loads, then
hit `esc`, we'll clear the search and empty the list, but never actually
hide the details pane. That looks weird.
This fixes that.
Closes _nothing i guess_.
* cmdpal: unset the command if we don't find a command (#39208)
On a reload, the system commands fallback would leave the "restart"
fallback behind, for the same reason as what we found around
e40372c & ef264d9 in #38455
* cmdpal: fix a leak in the extension template (#39209)
There's apparently a footgun with the way we're using ComServer, which
results in us leaking the extension processes when we think we've
disposed them
The fix unfortunately has to be on the extension side. Extensions
published prior to 0.2 will need to manually fix this.
closes: #39045
* [CmdPal] Prevent maximizing (#39220)
Prevent CmdPal window from maximizing when user double-click the title bar area.
Closes: #39096
* [CmdPal] MinWidth/Height and DPI-aware launch dimensions (#38637)
* MinWidth/Height and DPI-aware launch dimensions
* Making MainWindow DPI aware too
* Moving toastwindow to WinUIEx too
* Update MainWindow.xaml.cs
* Reverting back to the working logic
* Localizing settings window title
* Xaml formatting
* Update SettingsWindow.xaml.cs
* CmdPal: Cloak the window instead of hiding it (#39170)
This avoids the few frames of "flicker in" that XAML does when the window is SW_SHOW'n
closes#38384closes#38404closes#38438
* Lazy-fetch the settings for extensions (#38844)
This PR stops us from synchronously initializing the settings page for every extension (including built-in's) on startup. That incurs a small penalty that really adds up the more extensions a user has.
Instead, we'll now only initialize the `CommandSettings` object when we first actually need it.
From a relatively unscientific test, this saves approximately 10% on the initialization of builtin commands, and for my setup, it trims about 28% off extension initialization (across all built-in's / extensions):
branch | Built-in load (ms) | Extension load (ms) | %Δ builtin | %Δ extensions |
-- | -- | -- | -- | -- |
main | 1455 | 6867.6 | | |
this PR | 1309.2 | 4919 | -10.02% | -28.37%
Closes#38321
* [cmdpal] protect cmdpal from crash if adaptive card fails (#39264)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
## Summary of the Pull Request
Card = AdaptiveCard.FromJsonString(cardJson) is called in catch block, if it fails, app will crash.
* CmdPal: URI activate, rather than using shell:AppsFolder (#39269)
* Use a URI handler for launching
this is a test
* I think we can review this
* Add a settings URI too
* [CmdPal] Open CmdPal settings from PT settings (#39262)
* Turning description into a hyperlink
* Update expect.txt
* Update CmdPalPage.xaml.cs
* update xaml format.
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* update.
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
* Added logger
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* update
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
---------
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
Co-authored-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Shawn Yuan <shuaiyuan@microsoft.com>
* CmdPal: Actually observe Details (#39263)
Extensions can change the properties on their Details, and they should
be observable, but they weren't. This is because the ShellPage is
ultimately responsible for exposing the details, but it doesn't own the
details. The selected ListItemViewModel from the ListPage does.
This PR just adds a event handler on ListViewModel. We'll attach/detach
that handler to ListItemViewModels as the selection changes. In the body
of that handler, we'll let the ShellPage know when the details object
changes (by sending ShowDetails/HideDetails messages).
Closes#39216
* Bump toolkit version to 0.2.0 in template (#39292)
This bumps the version of the toolkit consumed by the template to 0.2.0
~Ironically, I have not yet published 0.2. I'm spinning that CI build currently. But I'll have that uploaded tomorrow morning at the latest~
EDIT: package is uploaded now
* Remove new label from command palette (#39318)
* remove new label from cmdpal
* fix xaml styling
* Fix settings crash issue when clicking "Open Cmdpal settings..." (#39322)
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
* [cmdpal] Disable "ignore shortcut when full screen" by default (#39323)
disable by default
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* [cmdpal] Fix winget cannot install after clicking "install" button issue (#39324)
init
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* [Fuzzing test] Use valid areaPath in OneFuzz configuration (#39368)
change areaPath for fuzzing test config
* Add log for cmd pal ext to trace exceptions (#39326)
* Add log to trace error for apps.
* Add bookmark log
* registry exception log
* fix
* Added logger for cmdpal extensions.
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
* remove noise
* Update
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
* change log level
* change level
* Fix comments
* Fixed comments.
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
* Resolve comments
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
---------
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
Co-authored-by: Shawn Yuan <shuaiyuan@microsoft.com>
* release: stop hardcoding version numbers for the telemetry package (#39390)
* Update Areapath in tsa.json to align latest one (#39391)
* [cmdpal] Add some logs for WinGet extension (#39329)
* [Fuzzing test] Use valid areaPath in OneFuzz configuration (#39393)
* Bump our telemetry package version (#39388)
Data collection is hard.
Our internal package, which was last bumped around August 2024,
mistakenly changed a load bearing string from `ETW_GROUP` to
`MSPG_GROUP`. The former sets the ETW group id. The later does nothing.
This PR represents bumping our dependency to the version with the fix.
Considering that none of our data for CmdPal worked anyways, I took the
opportunity to rename a bunch of our events that had totally generic
names.
Closes#38704
re: #38032
regressed around: #34078
* [Deps] Update .NET packages from 9.0.4 to 9.0.5 (#39404)
Updates .NET 9 Runtime / Library packages to the latest 9.0.5 servicing release for security fixes.
This PR also updates the version of System.Text.Json to 9.0.5 in the CmdPal extension template.
* [Fuzz] Add DLL Reference in OneFuzzConfig.json to Fix Hosts Fuzz Bug (#39398)
* add Testably.Abstractions.FileSystem.Interface.dll
* fix spell error
---------
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>
Co-authored-by: Laszlo Nemeth <57342539+donlaci@users.noreply.github.com>
Co-authored-by: RokyZevon <12629919+RokyZevon@users.noreply.github.com>
Co-authored-by: Yu Leng <42196638+moooyo@users.noreply.github.com>
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Davide Giacometti <25966642+davidegiacometti@users.noreply.github.com>
Co-authored-by: Gordon Lam <73506701+yeelam-gordon@users.noreply.github.com>
Co-authored-by: ruslanlap <106077551+ruslanlap@users.noreply.github.com>
Co-authored-by: Muhammad Danish <mdanishkhdev@gmail.com>
Co-authored-by: Bennett Blodinger <benwa@users.noreply.github.com>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
Co-authored-by: Ionuț Manța <ionut@janeasystems.com>
Co-authored-by: Hao Liu <liuhaobupt@163.com>
Co-authored-by: OlegHarchevkin <40352094+OlegKharchevkin@users.noreply.github.com>
Co-authored-by: dcog989 <89043002+dcog989@users.noreply.github.com>
Co-authored-by: Kai Tao <69313318+vanzue@users.noreply.github.com>
Co-authored-by: PesBandi <127593627+PesBandi@users.noreply.github.com>
Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com>
Co-authored-by: vanzue <vanzue@outlook.com>
Co-authored-by: Typpi <20943337+Nick2bad4u@users.noreply.github.com>
Co-authored-by: Mike Griese <migrie@microsoft.com>
Co-authored-by: Carlos Zamora <carlos.zamora@microsoft.com>
Co-authored-by: Abhyudit <64366765+bitmap4@users.noreply.github.com>
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
Co-authored-by: Ved Nig <vednig12@outlook.com>
Co-authored-by: Niels Laute <niels.laute@live.nl>
Co-authored-by: Aung Khaing Khant <aungkhaingkhant.dev@gmail.com>
Co-authored-by: Aung Khaing Khant <aungkhaingkhant@advent-soft.com>
Co-authored-by: Dustin L. Howett <duhowett@microsoft.com>
Co-authored-by: leileizhang <leilzh@microsoft.com>
Co-authored-by: Dustin L. Howett <dustin@howett.net>
Co-authored-by: Shawn Yuan <128874481+shuaiyuanxx@users.noreply.github.com>
Co-authored-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: cryolithic <cryolithic@gmail.com>
Co-authored-by: Lemonyte <49930425+lemonyte@users.noreply.github.com>
Co-authored-by: Gordon Lam (SH) <yeelam@microsoft.com>
Co-authored-by: Corey Hayward <72159232+CoreyHayward@users.noreply.github.com>
Co-authored-by: Jerry Xu <n.xu@outlook.com>
Co-authored-by: Jerry Xu <nxu@microsoft.com>
Co-authored-by: Shawn Yuan <shuaiyuan@microsoft.com>
Co-authored-by: Kayla Cinnamon <cinnamon@microsoft.com>
Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com>
Co-authored-by: Mengyuan <162882040+chenmy77@users.noreply.github.com>
Co-authored-by: Xiaofeng Wang (from Dev Box) <xiaofengwang@microsoft.com>
Updates .NET 9 Runtime / Library packages to the latest 9.0.5 servicing release for security fixes.
This PR also updates the version of System.Text.Json to 9.0.5 in the CmdPal extension template.
Data collection is hard.
Our internal package, which was last bumped around August 2024,
mistakenly changed a load bearing string from `ETW_GROUP` to
`MSPG_GROUP`. The former sets the ETW group id. The later does nothing.
This PR represents bumping our dependency to the version with the fix.
Considering that none of our data for CmdPal worked anyways, I took the
opportunity to rename a bunch of our events that had totally generic
names.
Closes#38704
re: #38032
regressed around: #34078
* Support pipeline running on win11-x64
* Update naming
* Update dependency
* Update jobs
* update format
* update format
* update naming
* Update jobs to stages
* Update Artifacts Name
* Update TestArtifactsName
* Update variable format
---------
Co-authored-by: Xiaofeng Wang (from Dev Box) <xiaofengwang@microsoft.com>
This bumps the version of the toolkit consumed by the template to 0.2.0
~Ironically, I have not yet published 0.2. I'm spinning that CI build currently. But I'll have that uploaded tomorrow morning at the latest~
EDIT: package is uploaded now
Extensions can change the properties on their Details, and they should
be observable, but they weren't. This is because the ShellPage is
ultimately responsible for exposing the details, but it doesn't own the
details. The selected ListItemViewModel from the ListPage does.
This PR just adds a event handler on ListViewModel. We'll attach/detach
that handler to ListItemViewModels as the selection changes. In the body
of that handler, we'll let the ShellPage know when the details object
changes (by sending ShowDetails/HideDetails messages).
Closes#39216
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
## Summary of the Pull Request
Card = AdaptiveCard.FromJsonString(cardJson) is called in catch block, if it fails, app will crash.
This PR stops us from synchronously initializing the settings page for every extension (including built-in's) on startup. That incurs a small penalty that really adds up the more extensions a user has.
Instead, we'll now only initialize the `CommandSettings` object when we first actually need it.
From a relatively unscientific test, this saves approximately 10% on the initialization of builtin commands, and for my setup, it trims about 28% off extension initialization (across all built-in's / extensions):
branch | Built-in load (ms) | Extension load (ms) | %Δ builtin | %Δ extensions |
-- | -- | -- | -- | -- |
main | 1455 | 6867.6 | | |
this PR | 1309.2 | 4919 | -10.02% | -28.37%
Closes#38321
* MinWidth/Height and DPI-aware launch dimensions
* Making MainWindow DPI aware too
* Moving toastwindow to WinUIEx too
* Update MainWindow.xaml.cs
* Reverting back to the working logic
* Localizing settings window title
* Xaml formatting
* Update SettingsWindow.xaml.cs
There's apparently a footgun with the way we're using ComServer, which
results in us leaking the extension processes when we think we've
disposed them
The fix unfortunately has to be on the extension side. Extensions
published prior to 0.2 will need to manually fix this.
closes: #39045
On a reload, the system commands fallback would leave the "restart"
fallback behind, for the same reason as what we found around
e40372c & ef264d9 in #38455
I cannot find an issue for this. I swear I filed it somewhere.
If you open winget, search for "terminal", wait till it loads, then
hit `esc`, we'll clear the search and empty the list, but never actually
hide the details pane. That looks weird.
This fixes that.
Closes _nothing i guess_.
* Add Powershell script to validate whether CSharp project correctly import shared props, update pipeline to enforce such validation, and fixed all projects that didn't import this shared props correctly
* add common props for fuzz test project
* update the path
* Only scans projects in src sub-folder
* Update .pipelines/verifyCommonProps.ps1
* Update csproj to include Common.Dotnet.CsWinRT.props
* Fix indentation in RegistryPreview.FuzzTests.csproj
* exclude TemplateCmdPalExtension.csproj in validation process
* exclude TemplateCmdPalExtension.csproj in validation process
---------
Co-authored-by: Leilei Zhang <leilzh@microsoft.com>
Co-authored-by: Jerry Xu <nxu@microsoft.com>
This reduces our extension startup time by approximately 70% on my
machine (I have 17 extensions). I'd guess the gains scale with the
number of extensions. That's 8s -> 3s on average, and now I also get 2.5s reloads.
This retains the order of the list of extensions, by only starting the
processes in parallel. Once we have all the command provider instances,
then actually retrieving the commands.
It also adds a timeout on startup & load, so that one misbehaving extension won't block everyone else.
closes: #38529
* add test case and fix bug
* add test
* add test
* add test
* add test case
* add fancyzones window name and fix test case error
* add test case
* add test case
* add test case After creating a virtual desktop
* add test case delete layout
* add test case grid layout change monitor resolution
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error
* fix pipeline error and only run fancyzone uitest
* disable other ui test code
* fix build error
* fix pipeline error
* fix pipeline error
* add restart scope exe
* enable other test code
* fix Spelling error
* add error log
---------
Co-authored-by: Zhaopeng Wang (from Dev Box) <zhaopengwang@microsoft.com>
Closes#38829
If we always UpdateProperty here, then there's a possible
race condition, where we raise the PropertyChanged(SearchText)
before the subclass actually retrieves the new SearchText from the
model. In that race situation, if the UI thread handles the
PropertyChanged before ListViewModel fetches the SearchText, it'll
think that the old search text is the _new_ value.
* Add Retry when enable
* Add correct for the checking logic
* Retry in another thread (#39042)
* launch thread
* dev
* fix a thread safety
* improve
* improve
* make code clear
* Fix comment
* fix comment
* improve
* self review
* fix & log
* silent fail if not reach 10 times
* fix a ci build flag error
* fix a macro
* some simple improve
---------
Co-authored-by: Gordon Lam (SH) <yeelam@microsoft.com>
* starting AoT flag push
* Few more
* bookmarks
* Really? The VM project compiles?
* Disable publish AOT before we really testing it.
---------
Co-authored-by: Mike Griese <migrie@microsoft.com>
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* Allow preventing selected result data retrieval
* Updated implementation to calculate sort order on result and update property name to better reflect purpose
* Update Result.cs sort order method name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* Align with the name GetSortOrderScore
---------
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
Co-authored-by: Gordon Lam (SH) <yeelam@microsoft.com>
* empowering users to maximize OOBE to their heart desire (#37823)
empowering users to maximize to their heart desire
* Add More Elements support for UITestAutomation
* Add Mouse Click and Base Components Test
* Add FindMyMouse Tests for Enable and Disable
* Add Mouse Highlighter Enable/Disable Test Case
* Add Mouse Actions Support for UITest Framework
* Delete src/modules/MouseUtils/FindMyMouse.UITests/FindMyMouseSettingTests.cs
* Update NameSpace and remove redundant code
* Update the SessionHelper and Sleep Time for Actions
* Add SendKey for Session and Fix Spelling Errors
* Add Tests for Mouse Pointer Crosshairs Enable/Disable
* Add Sleep Time to Action Parameters
* Add Edit System Settings
* Add MouseJump Enable/Disable Tests
* Fix Pipeline error for MouseHighlighter
* Fix pipeline error
* Resolve Spelling errors
* Fix pipeline errors
* Add FindMyMouse Setting Tests
* Update the Sleep time
* Update Sleep Time
* Fix pipeline errors
* Revert pipeline settings
---------
Co-authored-by: Clint Rutkas <clint@rutkas.com>
Co-authored-by: Yaqing Mi (from Dev Box) <yaqingmi@microsoft.com>
* [AdvancedPaste] [Fix Bug] Create ocrEngine from user profile language
GetOCRLanguage may fail based on language tag not matching (en-CA does not match en-GB or en-US), however user profile language may be valid.
* Update exception message.
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* update
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
---------
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
* add script to build a installer
* minor fix
* fix search path for msix file
* fix sign
* fix sign
* fix spelling
* Fix powershell5 can't recognize emoji
* ensure-wix
* bring cmdpal available during local build
* remove early quit
* fix marco
* add logger
* doc
* add a note
* self review
* fix macro def
* add functionality to export cert so that other machine can install it.
* spelling
_targets #38573_
At first I just wanted to add support for nested context menus.
But then I also had to add a search box, so the focus wouldn't get weird.
End result:

This gets rid of the need to have the search box and the command bar both track item keybindings - now it's just in the command bar.
Closes#38299Closes#38442
I'm filing this so that I don't lose it on this machine I use less often. We can probably hold it out of 0.90
Fixes:
* If a package is installed, we always display the version as "Unknown"
* also deals with a case where getting the package metadata could fail, and we'd hide the list item. That's only possible in the "installed, no updates available" case
* Allow package updates, add an icon for updates
* moves off the preview winget API onto a higher stable version
* Cancel previous ShowToolbar task if a new one is triggered
* more changes
* Fix space trigger starting at center
* Removed unneded code
* More changes
* Addressed feedback
* Fix another edge case
* empowering users to maximize OOBE to their heart desire (#37823)
empowering users to maximize to their heart desire
* Add More Elements support for UITestAutomation
* Add Mouse Click and Base Components Test
* Add FindMyMouse Tests for Enable and Disable
* Add Mouse Highlighter Enable/Disable Test Case
* Add Mouse Actions Support for UITest Framework
* Delete src/modules/MouseUtils/FindMyMouse.UITests/FindMyMouseSettingTests.cs
* Update NameSpace and remove redundant code
* Update the SessionHelper and Sleep Time for Actions
* Add SendKey for Session and Fix Spelling Errors
* Add Tests for Mouse Pointer Crosshairs Enable/Disable
* Add Sleep Time to Action Parameters
* Add Edit System Settings
* Add MouseJump Enable/Disable Tests
* Fix Pipeline error for MouseHighlighter
* Fix pipeline error
* Resolve Spelling errors
---------
Co-authored-by: Clint Rutkas <clint@rutkas.com>
Co-authored-by: Yaqing Mi (from Dev Box) <yaqingmi@microsoft.com>
* fancytest oneswitch test
* add GetActiveWindowTitle
* testcase1 add set layout
* change shortcut to win pgdn
* add hold key
* Snap several windows to one zone, verify switching works.
* pack snaptoonezone
* pack snaptoonezone
* Add Fancy Zone Switch tests
* Add Fancyzones switch zones
* remove code and change zoneuuid to zonesets
* fix spell error and remove files
* remove unuse keyup in elements
* remove to common api
* fix spell error
* Separate visual check by pipeline platform
* Update baseline file
* Add image to attachments when baseline file does not exist
* Update baseline resource file
---------
Co-authored-by: Xiaofeng Wang (from Dev Box) <xiaofengwang@microsoft.com>
* empowering users to maximize OOBE to their heart desire (#37823)
empowering users to maximize to their heart desire
* Add More Elements support for UITestAutomation
* Add Mouse Click and Base Components Test
* Add FindMyMouse Tests for Enable and Disable
* Add Mouse Highlighter Enable/Disable Test Case
* Add Mouse Actions Support for UITest Framework
* Delete src/modules/MouseUtils/FindMyMouse.UITests/FindMyMouseSettingTests.cs
* Update NameSpace and remove redundant code
* Update the SessionHelper and Sleep Time for Actions
* Add SendKey for Session and Fix Spelling Errors
* Add Tests for Mouse Pointer Crosshairs Enable/Disable
* Add Sleep Time to Action Parameters
---------
Co-authored-by: Clint Rutkas <clint@rutkas.com>
Co-authored-by: Yaqing Mi (from Dev Box) <yaqingmi@microsoft.com>
* [x] Re-adds the context menu shortcut text
* [x] Hooks up the keybindings to the search box so that you can just press the keys while you have an item selected, and do a context command
* [x] Hook these keybindings up to the context flyout itself
* [x] Adds a sample for testing
Solves #38271
* init
* update
* Remove duplicated cp command
* Change the long desc
* Update notice.md
* Use the same icon for fallback item
* Add Rappl to expect list
* update notice.md
* Move the original order back.
* Make Radians become default choice
* Fix empty result
* Remove unused settings.
Move history back.
Refactory the query logic
* fix typo
* merge main
* CmdPal: minor calc updates (#38914)
A bunch of calc updates
* maintain the visibility of the history
* add other formats to the context menu #38708
* some other icon tidying
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Mike Griese <migrie@microsoft.com>
* empowering users to maximize OOBE to their heart desire (#37823)
empowering users to maximize to their heart desire
* resume main
* Trust selfsign cert in localmachine\root to make msix available
* minor fix
* retry signing
---------
Co-authored-by: Clint Rutkas <clint@rutkas.com>
This one was subtle - the Settings class in the toolkit didn't ever change the items for a SettingsContentPage. For the main settings window, this was problematic. It would only ever hang onto one instance of that CommandSettings.SettingsContentPage, and never re-retrieve the value from it.
This fixes that issue, by making sure to raise an ItemsChanged in the settings changed handler, so that we automatically pull down the new settings forms.
For settings that were added to commands, as a context item, this wasn't an issue. They were always returning new forms to the host, with the current settings values in it.
Closes#38191
Apps that want to show MSAL dialogs on the Command Palette would explode if they passed CmdPal's HWND to WithParentActivityOrWindow. It's not entirely clear why, but MSAL would explode if the parent HWND is hidden.
When the MSAL dialog opened, we'd hide ourselves, and badda bing, badda boom, the extension would crash.
MSAL dialogs will set us to WS_DISABLED right before the dialog is opened. Easy solution. Don't hide ourselves, if we're disabled.
Helps some friends not depend on the existence of Teams :P
**WARNING:** This PR will probably blow up all in-flight PRs
at some point in the early days of CmdPal, two of us created seperate
`Exts` and `exts` dirs. Depending on what the casing was on the branch
that you checked one of those out from, it'd get stuck like that on your
PC forever.
Windows didn't care, so we never noticed.
But GitHub does care, and now browsing the source on GitHub is basically
impossible.
Closes#38081
This update aligns with Microsoft's security guidelines by pinning all GitHub Action tags and Docker tags to their full-length commits. This practice ensures immutability and reduces the risk of supply chain attacks. Note that 1st and 2nd party actions do not require hash pinning.
* starting to get some of the baseline
* Update NOTICE.md
* Upgrading streamjson gets the others on same version of newtonsoft.json
* Update PowerToys.Settings.csproj
* Update NOTICE.md
* Fix Color Picker resource leak (#38122)
Added a using statement to properly dispose of the Graphics object created from the Bitmap. This fixes resource leak.
* Fix CI complain
* Update MouseInfoProvider.cs
fix whitespace
---------
Co-authored-by: Kai Tao <69313318+vanzue@users.noreply.github.com>
For the winget DSC, Setting developer mode, installing Visual Studio 2022 & fetching and installing VS components all require elevation. Added securityContext: elevated for these resources. These configurations can now be invoked from user context, and will prompt for a single UAC to run resources that require elevation in a separate process.
* Add QuickNotes plugin to third-party Run plugins documentation
* chore: add ruslanlap to spelling allow-list
* chore: add ruslanlap to spelling allow-list
* chore: add ruslanlap to spelling allow-list
* Add ruslanlap to allowed names and remove from expected words list
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
## Summary of the Pull Request
Added a settings to enable/disable the system tray icon (enabled by default).
Adopter the term "system tray icon" for consistency with Windows 11 settings.
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] **Closes:** #38407
This is a fix for a pair of related crashes.
Basically, we'd crash on startup if we failed to initialize WinGet. This could happen in two different places:
* If WinGet wasn't installed, then we'd explode, cause obviously we can't call its APIs
* If we're running as Admin, we won't be able to instantiate it's COM server.
Regardless of how it happens, I've defaulted us to just _not enabling the winget built-in_. That's the simplest solution here.
As I was helpfully reminded, there's also an elevated WindowsPackageManagerFactory we could use too - though, that wouldn't solve the case of "winget isn't installed"
Closes#38460Closes#38440 (most likely)
In CmdPal and PT Run, if you currently try to go to mouse pointer, it fails. This looks to be due to capitalization in the command. This can be validated via run dialog also.
shifting to lowercase fixes the bug.
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] **Closes:** #38223
## Summary of the Pull Request
Fix#38337 and implement continuous navigation like PT Run v1
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] **Closes:** #38337
* add settings definition
* fix typos and improve settings
* make spell checker happy
* new icon type error
* first code to handle custom formats
* support parsing of new formats
* spelling and typos
* comment fix
* spell check
* start implement custom format results
* last changes
* finish implementation
* spell checker
* settings name
* add missing format
* reorder settings
* dev docs
* change ELF to EAB
* update dev docs
* last changes
* test cases
* fix typos
* fix typo
* port changes
* fixes
* changes
* fixes
* leap year support
* days in month
* tests
* comment
* fix comment
It appears there are two issues in WinGet regarding the installation of dependencies.
https://github.com/microsoft/winget-cli/issues/4661https://github.com/microsoft/winget-cli/issues/4679
For CmdPal 0.1, we're going to skip installing dependencies to make extension installation more robust. This will mostly work because extensions will depend on the same frameworks as the command palette itself (for now).
We will revert this once these two issues are fixed.
The problem:
> * we need to go update all the Fallback commands. (these are ones that extensions can use to react to the search text - basically, "what the user typed wasn't found immediately, but here's something they can fall back on"
> * this is wacky, because the way I had it, I update each item, and if it "changes visibility", then we need to update the main list, because we've already removed it from the list. So we need to re-update the list to account for that
> * you missed it reading that (and i missed it writing it) but that basically means we re-populate the list F={num fallbacks} times, because each one sends the "do it again" message
> * That results in us basically creating (F+1)*(N=num items+apps) view models, initializing them, and not needing most of them
The crux here being a single thread, to update all the fallback items,
that then only raises _one_ items changed at the very end.
I don't love this, one misbehaving fallback could stop all the others. In theory, we should do a parallel update of all these things, with a like, 1s timeout on each leg.
But it has gotta be faster till we can do #38140 (or similar)
Closes: (not sure I filed one). But the first typed character _felt_ slow.
This is a much tidier solution. Don't default _everything_ to a weight of 1 if the query is whitespace. Instead, do a simple string contains check (because FuzzySearch will beef it on just whitespace)
Closes#38133
I originally based this off of #38157, so I know these two won't collide
- `appLicensing` avoids the issue where installation requires access to the store servers for licensing.
- It was decided that PowerToys would manage CmdPal's startup.
This only repros on my desktop, so I suppose that means a slower machine is needed
I was mistaken, and assumed we were already operating on a copy here. We weren't. That meant that it was possible for another extension to be detected, change the list, and crash the whole palette.
## Validation Steps Performed
No longer does my desktop crash on startup
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
## Summary of the Pull Request
Attempt to fix `Layout cycle detected. Layout could not complete` exception when CmdPal is moved on a screen with different DPI.
I can repro almost 100% and no longer occurs after switching tags `ItemsView` with `ItemsControl`.
Doesn't seem to break visual and don't expect a huge number of tags so use an `ItemsControl` shouldn't be a problem.
<img width="491" alt="image" src="https://github.com/user-attachments/assets/05b698b2-ebe7-4356-bdaa-4de93aea13e6" />
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [ ] **Closes:** #xxx
- [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected
- [ ] **Tests:** Added/updated and all pass
- [ ] **Localization:** All end user facing strings can be localized
- [ ] **Dev docs:** Added/updated
- [ ] **New binaries:** Added on the required places
- [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries
- [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder
- [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects
- [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
- [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx
<!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here -->
## Detailed Description of the Pull Request / Additional comments
<!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well -->
## Validation Steps Performed
What we were doing only worked in English. The `.ToString` would get
you the text of the nav item, not the `Tag`
`InvokedItemContainer` gets you the `NavigationViewItem`.
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
## Summary of the Pull Request
All apps:
- Fix missing second command for opnening settings page
Time and Date plugin:
- fix for missing settings list in global plugin manager
- fix for wrong page title
system plugin
- fix for missing settings page in global plugin manager
- fix for missing open button on plugin list
- ~fix for wrong icon for firmware boot~
- fix for wrong subtitle for ipv6
- fix for wrong details for mac address
- fix for wrong layout of network details
- layout improvements for network details
- change default value for "hide disconected networks" to $false
- rename empty recycle bin setting to "Hide Empty Recycle Bin command"



<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [ ] **Closes:** #xxx
- [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected
- [ ] **Tests:** Added/updated and all pass
- [ ] **Localization:** All end user facing strings can be localized
- [ ] **Dev docs:** Added/updated
- [ ] **New binaries:** Added on the required places
- [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries
- [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder
- [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects
- [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
- [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx
<!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here -->
## Detailed Description of the Pull Request / Additional comments
<!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well -->
## Validation Steps Performed
More than a couple people hit mYsTeRiOuS iSsUeS on ARM. Extensions would load the first time, but never again. Their processes would start, but the objects would fail to load.
Fortunately, @azchohfi discovered that using `Shmuelie.WinRTServer`, rather than the one pilfered from devhome, doesn't have this problem.
I don't have an ARM machine to validate the changes, but @lauren-ciha thankfully did the groundwork to get this validated in their extension, so I think this should work.
Closes https://github.com/zadjii-msft/PowerToys/issues/97
- Removing the redundant icon + text in the bottom left corner
- Minor styling tweaks
- Adding subtle show/hide animations
- Improved narrator support for Settings button
- Minor design tweaks to the tags for better visibility (still needs more work in the future)

There is a bug in command palette where the top level commands from extensions gets duplicated after the extension raises items changed, or when it is requested by CmdPal for any reason. This didn't happen when we kill CmdPal and open it again.
When investigating, I noticed that the `UpdateCommandsForProvider` method was not deleting the top level commands for the extension.
This seems to be happening because the comparison `var isTheSame = wrapper == firstCommand;` is not comparing objects of the same type. It was comparing a `TopLevelViewModel` with a `CommandItem`, and it was never set to `true`.
I change it to compare the `TopLevelViewModel` of both commands, and now it seems to be detecting correctly.
Another option of fix could be comparing the `CommandItem`s.
closes https://github.com/zadjii-msft/PowerToys/issues/511
---
Another bug that I found while testing today is that when a user uninstalled or updated an extension, it was still being listed as an enabled extension. This was generating duplicates in the top level commands in case of updating an extension, and resulting in unpredictable behavior and occasional crashes in CmdPal.
Added a fix for that on `ExtensionService`, removing the uninstalled extensions also from the `_enabledExtensions` list.
---------
Co-authored-by: Mike Griese <migrie@microsoft.com>
## Summary of the Pull Request
Make settings window single.
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] **Closes:** https://github.com/zadjii-msft/PowerToys/issues/581
## Validation Steps Performed
Manual test.
- Open settings windows multiple times
- Activate minimized settings window
The original code not work. It will throw com exception.
I prefer to use ClipboardHelper one.
-----
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
## Summary of the Pull Request
Update OOBE's CmdPal page to show the actual hotkey and style it similar to other OOBE pages.

<!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well -->
## Validation Steps Performed
Open OOBE and verify it looks like other OOBE pages.
Both `TopLevelCommandItemWrapper` and `TopLevelViewModel` were really the same thing. The latter was from an earlier prototype, and the former is a more correct, safer abstraction. We really should have only ever used the former, but alas, we only used it for the SUI, and it piggy-backed off the latter, and that meant the latter's bugs became the former's.
tldr: I made the icon access safe in the SUI.
And while I was doing this, because we now have a cleaner VM abstraction here in the host, we can actually cleanly disable extensions, because the `CommandProviderWrapper` knows which `ViewModel`s it made.
Closes https://github.com/zadjii-msft/PowerToys/issues/426
Closes https://github.com/zadjii-msft/PowerToys/issues/478
Closes https://github.com/zadjii-msft/PowerToys/issues/577
I forgot that packages write to a virtualized registry, rather than the
real one. As it turn out, the registry plugin requires being able to
write to the registry to be able to open the correct location
Closes#38053
Windows Command Palette ("CmdPal") is the next iteration of PowerToys Run. With extensibility at its core, the Command Palette is your one-stop launcher to start _anything_.
By default, CmdPal is bound to <kbd>Win+Alt+Space</kbd>.


----
This brings the current preview version of CmdPal into the upstream PowerToys repo. There are still lots of bugs to work out, but it's reached the state we're ready to start sharing it with the world. From here, we can further collaborate with the community on the features that are important, and ensuring that we've got a most robust API to enable developers to build whatever extensions they want.
Most of the built-in PT Run modules have already been ported to CmdPal's extension API. Those include:
* Installed apps
* Shell commands
* File search (powered by the indexer)
* Windows Registry search
* Web search
* Windows Terminal Profiles
* Windows Services
* Windows settings
There are a couple new extensions built-in
* You can now search for packages on `winget` and install them right from the palette. This also powers searching for extensions for the palette
* The calculator has an entirely new implementation. This is currently less feature complete than the original PT Run one - we're looking forward to updating it to be more complete for future ingestion in Windows
* "Bookmarks" allow you to save shortcuts to files, folders, and webpages as top-level commands in the palette.
We've got a bunch of other samples too, in this repo and elsewhere
### PowerToys specific notes
CmdPal will eventually graduate out of PowerToys to live as its own application, which is why it's implemented just a little differently than most other modules. Enabling CmdPal will install its `msix` package.
The CI was minorly changed to support CmdPal version numbers independent of PowerToys itself. It doesn't make sense for us to start CmdPal at v0.90, and in the future, we want to be able to rev CmdPal independently of PT itself.
Closes#3200, closes#3600, closes#7770, closes#34273, closes#36471, closes#20976, closes#14495
-----
TODOs et al
**Blocking:**
- [ ] Images and descriptions in Settings and OOBE need to be properly defined, as mentioned before
- [ ] Niels is on it
- [x] Doesn't start properly from PowerToys unless the fix PR is merged.
- https://github.com/zadjii-msft/PowerToys/pull/556 merged
- [x] I seem to lose focus a lot when I press on some limits, like between the search bar and the results.
- This is https://github.com/zadjii-msft/PowerToys/issues/427
- [x] Turned off an extension like Calculator and it was still working.
- Need to get rid of that toggle, it doesn't do anything currently
- [x] `ListViewModel.<FetchItems>` crash
- Pretty confident that was fixed in https://github.com/zadjii-msft/PowerToys/pull/553
**Not blocking / improvements:**
- Show the shortcut through settings, as mentioned before, or create a button that would open CmdPalette settings.
- When PowerToys starts, CmdPalette is always shown if enabled. That's weird when just starting PowerToys/ logging in to the computer with PowerToys auto-start activated. I think this should at least be a setting.
- Needing to double press a result for it to do the default action seems quirky. If one is already selected, I think just pressing should be enough for it to do the action.
- This is currently a setting, though we're thinking of changing the setting even more: https://github.com/zadjii-msft/PowerToys/issues/392
- There's no URI extension. Was surprised when typing a URL that it only proposed a web search.
- [x] There's no System commands extension. Was expecting to be able to quickly restart the computer by typing restart but it wasn't there.
- This is in PR https://github.com/zadjii-msft/PowerToys/pull/452
---------
Co-authored-by: joadoumie <98557455+joadoumie@users.noreply.github.com>
Co-authored-by: Jordi Adoumie <jordiadoumie@microsoft.com>
Co-authored-by: Mike Griese <zadjii@gmail.com>
Co-authored-by: Niels Laute <niels.laute@live.nl>
Co-authored-by: Michael Hawker <24302614+michael-hawker@users.noreply.github.com>
Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com>
Co-authored-by: Seraphima <zykovas91@gmail.com>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
Co-authored-by: Kristen Schau <47155823+krschau@users.noreply.github.com>
Co-authored-by: Eric Johnson <ericjohnson327@gmail.com>
Co-authored-by: Ethan Fang <ethanfang@microsoft.com>
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>
* Adding in monaco usage for Reg preview
Looks like this was missed, adding in
* Add Monaco Editor license to NOTICE.md
adding in with peek
* Adding Registry Preview to top bullet list
* Add variable support - initial version without UI
* Add variable in template filename support in New+
* Fix XAML style
* Addressed code review feedback
* [SVGThumbnail] Check fill-rule in SVG file and apply it.
* [SVGThumbnail] Comment added
* [SVGThumbnail] SvgContents is used instead of all html content.
* [SVGThumbnail] - Use SvgContents to extract and modify SVG styles efficiently
- Add retry logic and error handling for WebView2 initialization
* use Linq
---------
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
Co-authored-by: Leilei Zhang <leilzh@microsoft.com>
* Fix snapshotting minimized packaged apps
* Fix window arranger to work with the same windows as the snapshot tool.
* spell checker
* optimising code
* Remove filter condition.
* Add Delete functionality for Peek.
* Updated the "No More Files" text block to use a Uid to load its resource text. Also altered the text style to be consistent with the FailedFallbackPreviewControl error page.
* Revert "Delete Directory.Packages.props"
This reverts commit 3a10918c9f91de64785722e4bdb33c58d1c2daea.
* Attempt to appease the spell-checking bot by renaming flag const.
* Show error message InfoBar if file deletion failed.
* Resolve XAML styling.
* XAML styling fix.
* Settings app updates for new delete confirmation setting.
* Add delete confirmation dialog and settings to Peek. Add shell notification event after delete operation.
* Spelling updates.
* Spelling update.
* Remove permanent delete parameter, YAGNI. Add hwnd parameter to delete so warning dialogs are correctly parented. Fix flags to not hide permanent delete warning.
* Simplify delete confirmation dialog. Remove workaround for focus visual issue. Ensure delete confirmation dialog is closed when the main window visibility is toggled.
* Fix delete delay. Do not regard user cancellations of permanent deletes as an error, but log them as info anyway. More descriptive name for delete confirmation dialog checkbox.
* Fix multiple Content_KeyUp events being raised for MainWindow.
* Synchronise ConfirmFileDelete setting between Peek and Settings app.
* Update following review: split System usings from others; do not log deleted item name.
* Fix XAML style
* first launch test
* add FancyZonesEditorHelper
* click monitor test and add FindByAccessibilityId function
* add ui initialization tests and add exit scope exe function
* add cleanup test function and change file init
* add TemplateLayoutsTest and add LayoutTypeEnumExtension.cs and Element class add sendkey function
* add UI Initialize Test
* add OpenEditLayoutDialog test case and add By type
* add LayoutHotkeysTest
* add EditLayoutTests and add element drag function
* add DeleteLayouTest and change cleanup to base class and change FindByAccessibilityId to By.AccessibilityId
* add DefaultLayoutsTest
* add CustomLayoutsTest
* add CreateLayoutTest
* add CopyLayoutTest
* add ApplyLayoutTest
* add some cleanup code
* fix spelling error
* fix DeleteLayoutWithHotkey test code bug
* change code
* fix restart exe some bug
* move first lunch text code to new file
* test write file error
* fix test code init fancyzone file error
* test maxsize button
* get current window size
* change layout count
* change test case work windows size
* change fancyzone editor window size
* change fancyzone editor window size and change element move rule
* change window size
---------
Co-authored-by: Zhaopeng Wang <zhaopengwang@microsoft.com>
* Initial implementation
* fix style
* Added border to popup
* More changes
* Now use accent color for select button
* Addressed feedback
* fix formatting
* Fix pressing the select in HC mode hiding its text
* Fix W10 hc1 and hc2 hover select button text invisible
* Update src/modules/colorPicker/ColorPickerUI/Controls/ColorPickerControl.xaml
Co-authored-by: Niels Laute <niels.laute@live.nl>
* Addresed feedback regarding FontFamily
* Made the titlebar part of the body
* fix wrong variable
* Added system menu option on right click on toolbar.
Fixed hide then show removing Mica effect
* Fix spell-check
* Fix xaml styling
---------
Co-authored-by: Niels Laute <niels.laute@live.nl>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
* First Draft
* Update according to comments as well as re-reading
* Finished multiple wording comments
* Removed the module name that appeared at the beginning of the sentence, as it was already included in the section name.
* Add more UI-Test, refactor UITestAutomation
* Convert manual test-case to automation
UI-Tests:
Validating Empty-view is shown if no entries in the list.
Validating Empty-view is NOT shown if 1 or more entries in the list.
Validating Add-an-entry HyperlinkButton in Empty-view works correctly.
Validating Adding-entry Button works correctly.
Validating the Add button should be Disabled if more than 9 hosts in one entry.
Validating the Add button should be Enabled if less or equal 9 hosts in one entry.
Validating error message should be shown if not run as admin.
Validating Warning-Dialog will be shown if 'Show a warning at startup' toggle is On.
Validating Warning-Dialog will NOT be shown if 'Show a warning at startup' toggle is Off.
Validating click 'Quit' button in Warning-Dialog, the Hosts File Editor window would be closed.
Validating click 'Accept' button in Warning-Dialog, the Hosts File Editor window would NOT be closed.
---------
Co-authored-by: Jerry Xu <nxu@microsoft.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* [AdvancedPaste] Additional actions, including Image to text
* Spellcheck issue
* [AdvancedPaste] Paste as file and many other improvements
* Fixed typo
* Fixed typo
* [AdvancedPaste] Improved paste window menu layout
* [AdvancedPaste] Improved settings window layout
* [AdvancedPaste] Removed AudioToText for the moment
* Code cleanup
* Minor fixes
* [AdvancedPaste] Semantic Kernel support
* Changed log-line with potentially sensitive info
* Spellcheck issues
* Various improvements for Semantic Kernel
* Spellcheck issue
* Refactored Clipboard routines
* Added integration tests for KernelService
* Extra telemetry for AdvancedPaste
* Added 'Hotkey' suffix to AdvancedPaste_Settings telemetry event
* Added IsSavedQuery
* Added KernelQueryCache
* Refactoring
* Added KernelQueryCache to BugReportTool delete list
* Added opt-n for Semantic Kernel
* Fixed bug with KernelQueryCache
* Ability to view last AI chat message on error
* Improved kernel query cache
* Used System.IO.Abstractions and improved tests
* Fixed under-count of token usage
* Used Semantic Kernel icon
* Cleanup
* Add missing EndProject line
* Fix dependency version conflicts
* Fix NOTICE.md
* Correct place of SemanticKernel in NOTICE.md
* Unlinked CustomPreview toggle from AI
* Added Microsoft.Bcl.AsyncInterfaces dependency to AdvancedPaste
* Fixed NOTICE.md order
* Moved Custom Preview to behaviour section
* Made Image to Text raise error on empty output
* Added AIServiceBatchIntegrationTests
* Updated AIServiceBatchIntegrationTests
* Added prompt moderation
* [AdvancedPaste] Media Transcoding support
* Spellcheck issue
* Improved transcoding output profile and added tests
* Moved GPO Infobar to better location
* Added cancel button and minor bug fixes
* Fixed crash
* Minor cleanups
* Improved transcoding error messages
* Used software back when transcoding fails with hardware accerlation
* Added Reencode to spellcheck
* Spellcheck issue
---------
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
Co-authored-by: Dustin L. Howett <dustin@howett.net>
Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com>
* Use function to init static value
* Replace GetFileName with GetFileNameWithoutExtension
* Add exception catch for GetCallerInfo
* Remove sourceLineNumber
* Add kernal to allow list
* Remove unused commit
* Add new folder to place source generation context
* update
* fix build issue
* Move line number back
* Use fileName to replace full path
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
* Allow custom preset's dimensions to be blank in the UI while still persisted as 0.
* XAML formatting - reorder namespaces.
* Add "(auto)" text to zero-value Width/Height in Settings. Ensure Width and Height fields in flyout are formatted to empty when their value is 0.
* [PowerRename]Add `$`, `^` and `.*` to RegEx cheatsheet
* Add * and +, remove combinations
* correct spelling
* Add ? and \s
* fix spelling once again
* Fix risky int cast in dark mode detection.
* Refactored Helper and Manager classes. New unit tests and changes to support Registry access mocking.
* Spelling update.
* Improve documentation for the registry-related classes.
* Fix issue with UpdateTheme raised in review. Enhance documentation. Rewrite tests to use parameterised unit tests, and expand to cover more cases.
* Add UITestAutomation framework
* add code comments
* Optimized code format
* Optimized code format
* Update commons and add keyboard manager ui test project
* Optimized code format
* test scope and fix fancyzone exe path
* Add readme
* Optimize helper functions and UI test method
* Fix spelling errors and restore module UI tests
* Restore Indent
* Update NOTICE.md
* Update comments to Session and Elements
* Update comments for Button and Window
* delete unnecessary code
* change FindElementByName to FindElmenet
* Update comments for ModuleConfigData
* Update readme and comments
* Remove extra comments
* change public property
* Optimize code readability
* add default Attach Function
* change attach function name
* Update comments to XML format
* Hide by internal functions
* Update readme
* Refine the framework
* Fix process start position and update readme
* Remove Enum PowerToysModuleWindow
* Update attach comments
* Update ModuleConfigData comments
---------
Co-authored-by: Zhaopeng Wang (from Dev Box) <zhaopengwang@microsoft.com>
Co-authored-by: Xiaofeng Wang (from Dev Box) <xiaofengwang@microsoft.com>
Co-authored-by: urnotdfs <709586527@qq.com>
* add hostsfile fuzztests templates code
* modify typos of hostsfile
* add hosts file
* add hosts fuzz to pipeline
* modify varify depjson rule
* fuzz validIPv4
* update .net7 to .net 8
* add valid6/validhosts tests on hosts
* catch all exception
* update onefuzzconfig.json to add 3 test cases
* add fuzz writeasync tests and fill exception
* add writeasync onefuzz config
* add dll of writeasync in job dependencies
* for testing az
* change file
* use mock filesystem in hosts tests projct
* fix spell erro
* fix spell erro and change notations
* update test
* fix space erro in code
* install python
* update
* test
* use powershell
* remove unused dll in oneconfig.json
* change download artifacts
* update
* test
* add
* test
* merge
* az
* change
* update
* test cli
* add debug
* test large
* fix
* use templete
* remove pdb file filter in job test project
* fix x64 python install
* for testing
* add
* fix
* use 3.11.1
* change for test
* revert some testing file
* update the file name for spelling check
* use azure cli zip
* use aka.ms
* rename the zip file
* remove test artifactname
* add exception and job dependencies
* Remove the limitation of fuzzing only on hosts
* add fuzz readme
* remove unused changes and space
* fix x86 in sln and remove newtonsoft.json.dll in oneconfig.json
* readd wrapper.dll in oneconfig.json
* drop randomsplit when fuzz writeasync and remove unuseful package
---------
* for testing az
* change file
* update test
* install python
* update
* test
* use powershell
* tes
* update enve
* update
* test
* add
* test
* merge
* az
* change
* update
* test cli
* add debug
* test large
* fix
* use templete
* fix x64 python install
* for testing
* add
* fix
* use 3.11.1
* change for test
* revert some testing file
* update the file name for spelling check
* use azure cli zip
* use aka.ms
* rename the zip file
* Handled NewWindowRequested WebView2 event, to allow links opened through Registry Preview to open in the system default web browser, rather than a new WebView2 window.
* Modified RegistryPreview implementatiion to use the open URI dialog that is currently used in Peek.
* Set up KBM WinUI3 Editor UI project
* Test invoking the KBM library via wrapper for WinUI3 C# UI
* Set up Editor Library Wrapper and enable logging
* fix spelling
* update spacing and remove unused file
* fix formatting
* update sln
* update wrapper project config
* import common props
* update UI reference
* gate the new editor with the experimentation toggle in settings
[Build] compatibility with VS17.3 and later, for C++23 <expected> has been introduced in VS17.3.6, and std::expected has conflict/inconsistent with the makeshift (expected-lite)
* [MWB] Changed to suppress the flow of the execution context
* Fix build after merge
* [MWB] Fix helper process termination issue in service mode
* Add some comments
* Fix issue with missing Image Resizer unit and fit information in settings description.
* Fix accessibility issues on Edit and Remove buttons. Fix various issues and refactor view model and ImageSize. New resources for accessibility text formats.
* Fix unit test because of change to new preset width and height. Fix 2 unit tests having incorrect expected/actual orderings.
* Post-review update: accessibility strings now formatted within the converter, instead of via format strings; simplified encoder GUID collection declaration and retrieval.
* Minor example text fix.
* Clean up the aot build issue.
* Merge main and clean up new AOT build issue
* Update LogEvent define.
* Update src/modules/AdvancedPaste/AdvancedPaste/Helpers/LogEvent.cs
Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com>
* update typo bug
* Remove unused allow list item
* Create a new folder to place source generation context
* Merge main and rename LogEvent to AIServiceFormatEvent
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com>
* add context menus
* string resources for contextmenu
* fix line break parsing for MULTI_SZ
* better presentation of multiline values and value tooltip
* cleanup
* ZoomIt initial code dump
* Change vcxproj to normalize dependency versions
* Fix code quality to build
* Add to PowerToys solution
* Clean out C-style casts
* Fix some more analyzer errors
* Constexpr a function
* Disable some warnings locally that it seemed better not to touch
* Add ZoomIt module interface
* Add GPO
* Add Settings page with Enable button
* Output as PowerToys.ZoomIt.exe
* Extract ZoomIt Settings definition to its own header
* Make ZoomItModuleInterface build with ZoomItSettings too
* WinRT C++ interop for ZoomItSettings
* From Registry To PowerToys Json
* Properly fix const_cast analyzer error
* Initial Settings page loading from registry
* Zoom mode settings
* Save settings
* Add file picker and DemoType file support
* Remaining DemoType settings
* Have ZoomIt properly reloading Settings and exiting
* Remove context menu entries for Options and Exit
* ZoomIt simple Break Options
* Break advanced options
* Simple Record settings
* Record Microphone setting
* Fix break background file picker title
* Font setting
* Fix build issues after merge
* Add ZoomIt conflict warning to Settings
* Exclude Eula from spell checking
* Fix spellcheck errors
* Fix spell check for accelerated menu items
* Remove cursor files from spellcheck. They're binary
* Fix forbidden patterns
* Fix XAML style
* Fix C# analyzers
* Fix signing
* Also sign module interface dll
* Use actual ZoomIt icon
* Add OOBE page for ZoomIt
* ZoomIt image for Settings
* Flyout and Dashboard entries
* Fix type speed slider labels
* Correctly load default Font
* Correctly register shortcuts on ZoomIt startup first run
* Fix modifier keys not changing until restart
* Show MsgBox on taken shortcut
* Start PowerToys Settings
* Normalize ZoomIt file properties with rest of PowerToys
* Add attribution
* Add ZoomIt team to Community.md
* More copyright adjustments
* Fix spellcheck
* Fix MsgBox simultaneous instance to the front
* Add mention of capturevideosample code use
* Add ZoomIt to process lists
* Add telemetry
* Add logging
* React to gpo
* Normalize code to space identation
* Fix installer build
* Localize percent setting
* Fix XAML styling
* Update src/settings-ui/Settings.UI/Strings/en-us/Resources.resw
Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com>
* Fix spellcheck
* One more spellcheck fix
* Integrate LiveDraw feature changes from upstream
* Fix name reuse in same scope
* Fix c-style casts
* Also register LIVEDRAW_HOTKEY
* Fix newLiveZoomToggleKey
* Update LiveZoom description in Settings to take LiveDraw into account
* Fix spellcheck
* Fix more spellcheck
* Fix Sysinternals capitalization
* Fix ARM64 Debug build
* Support Sysinternals build (#36873)
* Remove unneeded files
* Make build compatible with Sysinternals
* Separate PowerToys ZoomIt product name (#36887)
* Separate PowerToys ZoomIt product name
To help maintain the Sysinternals branding in the standalone version.
* Clarify branding-related includes
* Remove ZoomIt.sln
* Add foxmsft to spell-check names
* Add ZoomIt to README
* Add ZoomIt to GH templates
* Add ZoomIt events to DATA_AND_PRIVACY.md
* Remove publish_config.json
* Remove publish_config.json from vcxproj too
---------
Co-authored-by: Mark Russinovich <markruss@microsoft.com>
Co-authored-by: Alex Mihaiuc <69110671+foxmsft@users.noreply.github.com>
Co-authored-by: John Stephens <johnstep@microsoft.com>
Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com>
* Remove all VideoConferenceMute related code and files
* Clean up vcm driver registry keys
* Also remove the Webcam report tool
* Also clean out video conference on the installer
* Fix spellcheck
* Remove comment about video conf
* Update gpo files revision
* Revert removing the VCM policies
* Deprecate VCM GPO policy
* Change deprecation message to show first supported version
* Tweak supported strings in the adml
* [Workspaces] Implementing set and get GUID to/from HWND to distinguish windows moved by the Workspaces tool
* After launch and capture copy the CLI args from the "original" project
* Fix getting GUID
* spell check
* modification to be able to handle different data sizes on different systems
* code optimisation
* Replacing string parameter by InvokePoint
* renaming variable
* Fix borders for windows in the Settings UI
* Fix HOSTS window
* Fix Advanced Paste
* Fix Environment Variables
* Fix File Locksmith
* Fix Peek, with a caveat
* Fix Registry Preview
* Remove unused imports
* Clean up imports in OobeShellPage
* Move OSVersionHelper from Common.UI up into ManagedCommon
* init
* Use AotCompatibility instead
* Replace typeof(Lanaguge) with GetValues<Language>
* Create new folder to place source generation context file.
---------
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Added support for .resx and .resw preview support. These files are XML based files so I added the file extensions as part of the registerAdditionalLanguage("xmlExt"...) function.
* Add ḱ to PowerAccent for Proto-Indo-European
* Fix Spelling Check
* Add more letters to PIE
* Order PIE after PI
---------
Co-authored-by: Hao Liu (from Dev Box) <haoliu3@microsoft.com>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
* [New+]Don't override New actions from Explorer
* Update src/modules/NewPlus/NewShellExtensionContextMenu.win10/shell_context_menu_win10.cpp
* Update src/modules/NewPlus/NewShellExtensionContextMenu.win10/shell_context_menu_win10.cpp
* Add pattern for learn.microsoft links
* Also only Query for context menu
* Remove "prerelease: true"
The Microsoft.WinGet.DSC module is GA so prerelease: true is no longer needed.
* Update expect.txt
fixing spellcheck warning
---------
Co-authored-by: Clint Rutkas <clint@rutkas.com>
This PR aims to fix the bug #35225 by introducing a new method IsJson to determine if a given text is in JSON format.
The IsJson method is then utilized in the ToJsonFromXmlOrCsvAsync method to optimize the processing logic.
If the text is already in JSON format, it is returned directly without further conversion from XML or CSV.
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
---------
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
This PR introduces the following changes to the CI pipeline and version management:
Pipeline Enhancements:
1. Added a new script UpdateVersions.ps1 to automate the update of Microsoft.WindowsAppSDK versions across various project files.
2. Introduced a new pipeline configuration ci-using-the-latest-winappsdk.yml to build using the latest Microsoft.WindowsAppSDK.
3. Updated existing pipeline configurations to support the new useLatestWinAppSDK parameter.
Pipeline Configuration Updates:
1. Updated job-build-project.yml to handle the useLatestWinAppSDK parameter and adjust the RestoreAdditionalProjectSourcesArg accordingly.
2. Added a new template steps-update-winappsdk-and-restore-nuget.yml for updating and restoring NuGet packages with the latest Microsoft.WindowsAppSDK.
3. Added WinAPPSDK version selection, the pipeline can be manually triggered to use the specified version.
---------
Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>
# This Action will scan dependency manifest files that change as part of a Pull Request,
# surfacing known-vulnerable versions of the packages declared or updated in the PR.
# Once installed, if the workflow run is marked as required,
# PRs introducing known-vulnerable packages will be blocked from merging.
#
# As recommended by Microsoft's security guidelines (https://docs.opensource.microsoft.com/security/tsg/actions/#requirements-for-security-hardening-your-own-github-actions),
# 3rd-party actions should be pinned to a specific commit hash to prevent supply chain attacks.
# This update aligns with best practices; 1st/2nd-party actions is not required hash pinning.
# After VS 17.11 update some of PowerToys dlls have no fileVersion in deps.json even though the
# version is correctly set. This is a workaround to skip our dlls as we are confident that all of
# our dlls share the same version across the dependencies.
# After VS 17.13 these error versions started appearing as 0.0.0.0 so we've added that case to the condition as well.
continue
}
@@ -85,5 +91,4 @@ if ($totalFailures -gt 0) {
}
Write-Host-ForegroundColorGreen"All "$referencedFileVersionsPerDll.keys.Count" libraries are mentioned with the same version across the dependencies.`r`n"
Michael contributed the [initial version](https://github.com/microsoft/PowerToys/issues/23216) of the Mouse Jump tool and [a number of updates](https://github.com/microsoft/PowerToys/pulls?q=is%3Apr+author%3Amikeclayton) based on his FancyMouse utility.
### [@pedrolamas](https://github.com/pedrolamas/) - Pedro Lamas
Pedro helped create the thumbnail and File Explorer previewers for 3D files like STL and GCode. If you like 3D printing, these are very helpful.
PesBandi has helped do massive amounts of Quick Accent and bug fixes.
@@ -121,6 +133,8 @@ Find My Mouse is based on Raymond Chen's SuperSonar.
Crop And Lock is based on the original work of Robert Mikhayelyan, with Program Manager support from [@kevinguo305](https://github.com/kevinguo305) - Kevin Guo.
ZoomIt's Video Recording Session code is based on Robert Mikhayelyan's https://github.com/robmikh/capturevideosample code.
### Microsoft InVEST team
This amazing team helped PowerToys develop PowerToys Run and Keyboard manager as well as update our Settings to v2. @alekhyareddy28, @arjunbalgovind, @jyuwono@laviusmotileng-ms, @ryanbodrug-microsoft, @saahmedm, @somil55, @traies, @udit3333
@@ -160,31 +174,43 @@ Other contributors:
* Paul Schmitt - WWL
* And many other Users!
## ZoomIt original contributors
ZoomIt source code was originally implemented by [Sysinternals](https://sysinternals.com):
- [@markrussinovich](https://github.com/markrussinovich) - Mark Russinovich
- [@foxmsft](https://github.com/foxmsft) - Alex Mihaiuc
- [@johnstep](https://github.com/johnstep) - John Stephens
## PowerToys core team
- [@crutkas](https://github.com/crutkas/) - Clint Rutkas - Lead
- [@cinnamon-msft](https://github.com/cinnamon-msft) - Kayla Cinnamon - Lead
<!-- Including MessagePack to force version, since it's used by StreamJsonRpc but contains vulnerabilities. After StreamJsonRpc updates the version of MessagePack, we can upgrade StreamJsonRpc instead. -->
<!-- Package Microsoft.Win32.SystemEvents added as a hack for being able to exclude the runtime assets so they don't conflict with 8.0.1. This is a dependency of System.Drawing.Common but the 8.0.1 version wasn't published to nuget. -->
<!-- Package System.CodeDom added as a hack for being able to exclude the runtime assets so they don't conflict with 8.0.1. This is a dependency of System.Management but the 8.0.1 version wasn't published to nuget. -->
<!-- Package System.Data.SqlClient added to force it as a dependency of Microsoft.Windows.Compatibility to the latest version available at this time. -->
<!-- Package System.Diagnostics.EventLog added as a hack for being able to exclude the runtime assets so they don't conflict with 8.0.1. This is a dependency of System.Data.OleDb but the 8.0.1 version wasn't published to nuget. -->
<!-- Package System.Diagnostics.PerformanceCounter added as a hack for being able to exclude the runtime assets so they don't conflict with 8.0.11. -->
@@ -40,19 +35,19 @@ We will be highlighting a cool utility each day for 24 days in December! To foll
Go to the [Microsoft PowerToys GitHub releases page][github-release-link] and click on `Assets` at the bottom to show the files available in the release. Please use the appropriate PowerToys installer that matches your machine's architecture and install scope. For most, it is `x64` and per-user.
<!-- items that need to be updated release to release -->
@@ -98,107 +93,96 @@ For guidance on developing for PowerToys, please read the [developer docs](/doc/
Our [prioritized roadmap][roadmap] of features and utilities that the core team is focusing on.
### 0.86 - October 2024 Update
### 0.90 - March 2025 Update
In this release, we focused on new features, stability, and improvements.
In this release, we focused on new features, stability, and automation.
**Highlights**
- Advanced Paste has new abilities: Image to text, and paste to file (text / png / html).
- In settings, we've adjusted the left navigation to group the utilities. As the number of utilities shipped with PowerToys keeps growing, we felt this was a needed adjustment. Thanks everyone for your feedback!
- Workspaces received many bug fixes, including the proper launching of many instances of the same application in the same workspace. Note, we are still actively looking at how to properly handle PWA detection.
- We've added a diagnostic data (telemetry) opt-in option in the Settings General tab. As it is off-by-default, we encourage users to turn it on as that helps direct our development efforts and their journeys. More information about the data we collect can be found in the [PowerToys Data and Privacy documentation](https://aka.ms/powertoys-data-and-privacy-documentation) and what each event does.
**✨Highlights**
### General

-Added a setting for diagnostic data (telemetry) opt-in (off by default, however, see above for why we encourage you to opt-in!) and user controls to view data.
-Improved exception logging by adding the type of Exception and InnerException. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
-New module: Command Palette ("CmdPal") - Created as the evolution of PowerToys Run with extensibility at the forefront, Command Palette is a quick launcher with a richer display and additional capabilities without sacrificing performance, allowing you to start anything with the shortcut **Win+Alt+Space**! Thanks [@zadjii-msft](https://github.com/zadjii-msft), [@niels9001](https://github.com/niels9001), [@michael-hawker](https://github.com/michael-hawker), [@joadoumie](https://github.com/joadoumie), [@plante-msft](https://github.com/plante-msft), [@ethanfangg](https://github.com/ethanfangg) and [@krschau](https://github.com/krschau)!
-Enhanced the Color Picker by switching from WPF UI to .NET WPF, resulting in improved themes and visual consistency across different modes. Thanks [@mantaionut](https://github.com/mantaionut)! Thanks [@Jay-o-Way](https://github.com/Jay-o-Way) and [@niels9001](https://github.com/niels9001) for helping with the review!
- Added the ability to delete files directly from Peek, enhancing file management efficiency. Thanks [@daverayment](https://github.com/daverayment) and thanks [@htcfreek](https://github.com/htcfreek) for the review!
- Added support for variables in template filenames, enabling dynamic elements like date components and environment variables for enhanced customization in New+. Thanks [@cgaarden](https://github.com/cgaarden)!
### Advanced Paste
### Color Picker
-Added new built-in actions: Image to text, and paste txt, png or html as a file.
-Replaced WPF UI with .NET WPF for the Color Picker, enhancing compatibility and improving theme support. Thanks [@mantaionut](https://github.com/mantaionut)! Thanks [@Jay-o-Way](https://github.com/Jay-o-Way) and [@niels9001](https://github.com/niels9001) for helping with the review!
### Mouse Jump
### Command Palette
-Refactored the common classes into a separate project. Thanks [@mikeclayton](https://github.com/mikeclayton)!
- Brought back the telemetry events that were deleted across previous refactoring efforts.
-Introduced the Windows Command Palette ("CmdPal"), the next iteration of PowerToys Run, designed with extensibility at its core. CmdPal includes features such as searching for installed apps, shell commands, files and WinGet package installation. This module aims to provide a more powerful and flexible launcher experience. Thanks [@zadjii-msft](https://github.com/zadjii-msft), [@niels9001](https://github.com/niels9001), [@michael-hawker](https://github.com/michael-hawker), [@joadoumie](https://github.com/joadoumie), [@plante-msft](https://github.com/plante-msft), and the whole team!
### FancyZones
- Fixed a bug where deleting a layout resulted in incorrect data being written to the JSON file.
- Fixed a bug where layout hotkeys were displayed incorrectly, ensuring the hotkey list does not include invalid entries.
- Fixed an issue where the "None" option was missing in the editor layout.
### Image Resizer
- Fixed warnings in ImageResizer regarding the use of variables "shellItem" and "itemName" without being initialized.
### Mouse Without Borders
-Refactored the Logger common classes. Thanks [@mikeclayton](https://github.com/mikeclayton)!
-Enhanced the logger to properly track the file path for easier debugging.
- Refactored the "Common" class into distinct individual classes to enhance maintainability, and updated all references and unit tests to reflect these changes. Thanks [@mikeclayton](https://github.com/mikeclayton) for this!
### New+
-Fixed the telemetry event for when the modules is enabled or disabled. (This was a hotfix for 0.85)
- Fixed bug when creating folders or files that contain Unicode characters. Thanks [@cgaarden](https://github.com/cgaarden)!
- Fixed bug when the name of a new folder collided with an already existing folder. Thanks [@cgaarden](https://github.com/cgaarden)!
- Updated the New+ icons to the fluent style.
-Added support for variables in template filenames, including date/time components, parent folder name, and environment variables. Thanks [@cgaarden](https://github.com/cgaarden)!
### Peek
-Folder preview enumeration of size and number of files is now more responsive and faster. Thanks [@daverayment](https://github.com/daverayment)!
-Added the ability to delete the file currently being previewed in Peek, including navigation updates and handling for deleted items. Thanks [@daverayment](https://github.com/daverayment) and thanks [@htcfreek](https://github.com/htcfreek) for your help reviewing this!
### PowerToys Run
-Handled a culture not found error when checking for right-to-left languages.
- Fixed the WebSearch plugin results title being trimmed in the UI. Thanks [@octastylos-pseudodipteros](https://github.com/octastylos-pseudodipteros)!
-The Unit Converter plugin will now show more significant digits. Thanks [@PesBandi](https://github.com/PesBandi)!
-Improved error handling when copying to the clipboard results in an error. Thanks [@PesBandi](https://github.com/PesBandi)!
### Quick Accent
- Added support for the Serbian Cyrillic character set. Thanks [@Sirozha1337](https://github.com/Sirozha1337)!
### Registry Preview
- Adopted the Monaco Editor as the UI text editor. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
-Fixed an issue where duplicated applications were shown by ensuring the shell link helper opens .ink files non-exclusively and correctly retrieves the "FullPath". Thanks [@htcfreek](https://github.com/htcfreek) and [@davidegiacometti](https://github.com/davidegiacometti) for review!
- Fixed an issue where applying round corners on Windows 11 build 22000 caused crashes.
-Async the OnRename method to unblock the thread. Thanks [@davidegiacometti](https://github.com/davidegiacometti) for review!
-Added support for using `sq` instead of `^2` in the Unit Converter. Thanks [@PesBandi](https://github.com/PesBandi)!
### Settings
-Fixed a crash when trying to access a non-existing templates folder from the New+ page. (This was a hotfix for 0.85)
-Added a navigation tree to group utilities in the left navigation menu.
- Sorted the list of languages in the language selection combo box in the General tab. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Fixed the state of the info bar about templates not being backed up to not close and react to the module's enabled state in the New+ page. Thanks [@htcfreek](https://github.com/htcfreek)!
- Fixed a crash caused by a dangling thread.
- Clicking a notification about there being an update available should now correctly open the Settings application in the General tab.
- Fixed a UI freeze when trying to access the Diagnostic Data Viewer files. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
-Disabled the spell check feature in the text boxes of plugin settings for PowerToys Run. Thanks [@htcfreek](https://github.com/htcfreek)!
-Fixed an issue where InfoBars for release notes errors were not displayed properly, and added a retry button. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
### Workspaces
- Fixed launching the incorrect workspace when launching many workspaces quickly through shortcuts. (This was a hotfix for 0.85)
- Fixed launching many instances of the same application in a workspace.
- Fixed a crash when a previously captured monitor ID no longer existed.
- Fixed an issue causing the wrong coordinates to be saved for minimized applications.
- Fixed an issue causing a crash when stress testing workspace launching.
- Fixed application launching when UAC is off and every application always runs elevated.
- Fixed an issue where some minimized packaged apps (e.g., Microsoft ToDo, Settings) were not snapshotted.
### Documentation
- Added HackMD plugin mention to thirdPartyRunPlugins.md. Thanks [@8LWXpg](https://github.com/8LWXpg)!
- Added SSH plugin mention to thirdPartyRunPlugins.md. Thanks [@8LWXpg](https://github.com/8LWXpg)!
- Added the [Data and Privacy documentation](https://github.com/microsoft/PowerToys/blob/main/DATA_AND_PRIVACY.md) to the repo.
- Added the FirefoxBookmark plugin to the list of Third-Party plugins for PowerToys Run. Thanks [@8LWXpg](https://github.com/8LWXpg)!
- Added the SVGL third-party plugin to PowerToys Run, enabling users to search, browse, and copy SVG logos. Thanks [@SameerJS6](https://github.com/SameerJS6)!
- Added Monaco usage for the Registry Preview.
### Development
-Fixed the CI precheck action to take into account the recent changes in CI actions.
-Added the new Microsoft org issue types to the issue templates. Thanks [@Aaron-Junker](https://github.com/Aaron-Junker)!
-Updated System.Text.Json to 8.0.5 and System.Runtime.Caching to 8.0.1 and related dependencies to the latest to address security reports. Thanks [@snickler](https://github.com/snickler)!
- Updated WinAppSDK to 1.6.1 and CsWinRT to 2.1.5. Thanks [@snickler](https://github.com/snickler)!
- Upgraded the WpfUI dependency to 3.0.5.
- Updated MessagePack to 2.5.187 and StreamJsonRpc to 2.19.27 to address security reports.
-Removed some of the hacks that are no longer needed that tried to force same dependency versions in .csproj files.
-Removed the Markdown file exclusions from the conditions that trigger a full CI test.
-CI fails again when there are XAML style errors in a PR.
-Fixed CI actions that were not failing when one of the powershell scripts they tried to run was failing.
- Fixed analyzer violations to allow fully building PowerToys on Visual Studio 17.12. Thanks [@snickler](https://github.com/snickler)!
-Updated WinGet configuration file location and extension. Thanks [@mdanish-kh](https://github.com/mdanish-kh)!
-Removed the Markdown file bypass to ensure CI runs for commits that only update Markdown files.
-Fixed an issue where the default generated file path exceeded the length limit of 260 characters for EnvironmentVariablesUILib.csproj, causing build failures.
- Upgraded WindowsAppSDK to 1.6.250205002 and CsWinRT to 2.2.0. Thanks [@htcfreek](https://github.com/htcfreek) for review!
- Upgraded XamlStyler to 3.2501.8 and dotnet-consolidate to 4.2.0. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Updated .NET Packages from 9.0.2 to 9.0.3.
-Optimized the UI Test Automation Framework and added UI test cases for the Hosts File Editor module.
-Added fuzz testing for RegistryPreview.
-Added new UI tests for the FancyZones editor, including tests for creating, duplicating, editing, and deleting layouts.
-Added telemetry code to measure the module editor open time and evaluate the benefits of applying AOT.
#### What is being planned for version 0.87
For [v0.87][github-next-release-work], we'll work on the items below:
### What is being planned for version 0.91
For [v0.91][github-next-release-work], we'll work on the items below:
- Stability / bug fixes
- New module: File Actions Menu
-Integrate Sysinternals ZoomIt
-New UI Automation tests
- Working on installer upgrades
- Upgrading Keyboard Manager's editor UI
- Stability / bug fixes
## PowerToys Community
@@ -220,6 +204,5 @@ The application logs basic diagnostic data (telemetry). For more information on
## ⚙️ [Test run in the cloud](https://eng.ms/docs/cloud-ai-platform/azure-edge-platform-aep/aep-security/epsf-edge-and-platform-security-fundamentals/the-onefuzz-service/onefuzz/faq/notwindows/walkthrough)
To submit a job to the cloud you can run with this command:
You want to run with --do-not-file-bugs because if there is an issue with running the parser in the cloud (which is very possible), you don't want bugs to be created if there is an issue. The --duration task is the number of hours you want the task to run. I recommend just running for 1 hour to make sure things work initially. If you don't specify this parameter, it will default to 48 hours. You can find more about submitting a test job here.
OneFuzz will send you an email when the job has started.
A specialized UI test framework for PowerToys that makes it easy to write UI tests for PowerToys modules or settings. Let's start writing UI tests!
## Before running tests
- Install Windows Application Driver v1.2.1 from https://github.com/microsoft/WinAppDriver/releases/tag/v1.2.1 to the default directory (`C:\Program Files (x86)\Windows Application Driver`)
- Enable Developer Mode in Windows settings
## Running tests
- Exit PowerToys if it's running.
- Open `PowerToys.sln` in Visual Studio and build the solution.
- Run tests in the Test Explorer (`Test > Test Explorer` or `Ctrl+E, T`).
## How to add the first UI tests for your modules
- Create a new project and add the following references to the project file. Change the OutputPath to your own module's path.
```
<Project Sdk="Microsoft.NET.Sdk">
<!-- Look at Directory.Build.props in root for common stuff as well -->
While working on tests, you may need a tool that helps you to view the element's accessibility data, e.g. for finding the button to click. For this purpose, you could use [AccessibilityInsights](https://accessibilityinsights.io/docs/windows/overview).
- [ ] The plugin is a project under `modules\launcher\Plugins`
- [ ] Microsoft plugin project name pattern: `Microsoft.PowerToys.Run.Plugin.{PluginName}`
- [ ] Community plugin project name pattern: `Community.PowerToys.Run.Plugin.{PluginName}`
- [ ] The plugin target framework should be `net8.0-windows`
- [ ] The plugin target framework should be `net9.0-windows10.0.22621.0`
- [ ] If the plugin uses any 3rd party dependencies the project file should import `DynamicPlugin.props`
- [ ] 3rd party dependencies must be compatible with .NET 9
- [ ] The plugin has to contain a `plugin.json` file of the following format in its root folder:
```json
@@ -16,7 +17,7 @@
"Author":string,
"Version":"1.0.0",// For future compatibility
"Language":"csharp",// So far we support only csharp
"Website":"https://aka.ms/powertoys",
"Website":"https://aka.ms/powertoys",// Has to be an absolute uri starting with "http://" or "https://".
"ExecuteFileName":string,// Should be {Type}.PowerToys.Run.Plugin.{PluginName}.dll
"IcoPathDark":string,// Path to dark theme icon. The path is relative to the root plugin folder
"IcoPathLight":string// Path to light theme icon. The path is relative to the root plugin folder
@@ -35,10 +36,10 @@ public static string PluginID => "xxxxxxx"; // The part xxxxxxx stands for the p
- [ ] Plugin's output code and assets have to be included in the installer [`Product.wxs`](/installer/PowerToysSetup/Product.wxs)
- [ ] Test the plugin with a local build. Build the installer, install, check that the plugin works as expected
- [ ] All plugin's binaries have to be included in the signed build [`pipeline.user.windows.yml`](/.pipelines/pipeline.user.windows.yml)
- [ ] The plugin target framework has to be net8.0-windows. All dependencies should be compatible with .NET 8.
Some localization steps can only be done after the first pass by the localization team to provide the localized resources.
In the PR that adds a new plugin, reference a new issue to track the work for fully enabling localization for the new plugin.
- [ ] Add the resource folder to https://github.com/microsoft/PowerToys/blob/21247c0bb09a1bee3d14d6efa53d0c247f7236af/installer/PowerToysSetup/Product.wxs#L825
- [ ] Add the resource files under the section https://github.com/microsoft/PowerToys/blob/21247c0bb09a1bee3d14d6efa53d0c247f7236af/installer/PowerToysSetup/Product.wxs#L882
- [ ] Your plugin's executable file (DLL) has to have correct version informations after building it. (This version information will be shown on the settings page.)
| Unix Timestamp in milliseconds | 1646496622500 | x | x |
| Hour | 10 | x | |
| Minute | 30 | x | |
| Second | 45 | x | |
| Millisecond | 678 | x | |
| Day (Week day) | Saturday | x | |
| Day of the week | 6 | x | |
| Day of the month | 5 | x | |
| Day of the year | 64 | x | |
| Week of the month | 1 | x | |
| Week of the year (Calendar week, Week number) | 10 | x | |
| Month | March | x | |
| Month of the year | 3 | x | |
| Month and day | March 7 | x | x |
| Year | 2022 | x | |
| Era | AD | x | |
| Era abbreviation | A | x | |
| Month and year | March 2022 | x | x |
| Windows file time (Int64 number) | 637820976123938199 | x | x |
| Universal time format: YYYY-MM-DD hh:mm:ss| 2022-03-05 16:20:12Z | x | x |
| ISO 8601 | 2022-03-05T17:23:04 | x | x |
| ISO 8601 UTC | 2022-03-05T16:23:04 | x | x |
| ISO 8601 with time zone | 2022-03-05T17:23:04+01:00 | x | x |
| ISO 8601 UTC with time zone | 2022-03-05T16:23:04Z | x | x |
| RFC1123 | Sat, 05 Mar 2022 16:23:04 GMT | x | x |
| Time | 5:10 PM | x | x | |
| Date | 3/5/2022 | x | x | |
| Now | 3/5/2022 5:10 PM | x | x | |
| Time UTC | 4:10 PM | x | x | |
| Now UTC | 3/5/2022 4:10 PM | x | x | |
| Unix Timestamp | 1646496622 | x | x | |
| Unix Timestamp in milliseconds | 1646496622500 | x | x | |
| Hour | 10 | x | | |
| Minute | 30 | x | | |
| Second | 45 | x | | |
| Millisecond | 678 | x | | |
| Day (Week day) | Saturday | x | | |
| Day of the week | 6 | x | | |
| Day of the month | 5 | x | | |
| Day of the year | 64 | x | | |
| Week of the month | 1 | x | | |
| Week of the year (Calendar week, Week number) | 10 | x | | |
| Month | March | x | | |
| Month of the year | 3 | x | | |
| Month and day | March 7 | x | x | |
| Year | 2022 | x | | |
| Era | AD | x | | |
| Era abbreviation | A | x | | |
| Month and year | March 2022 | x | x | |
| Windows file time (Int64 number) | 637820976123938199 | x | x | |
| Universal time format: YYYY-MM-DD hh:mm:ss| 2022-03-05 16:20:12Z | x | x | |
| ISO 8601 | 2022-03-05T17:23:04 | x | x | |
| ISO 8601 UTC | 2022-03-05T16:23:04 | x | x | |
| ISO 8601 with time zone | 2022-03-05T17:23:04+01:00 | x | x | |
| ISO 8601 UTC with time zone | 2022-03-05T16:23:04Z | x | x | |
| RFC1123 | Sat, 05 Mar 2022 16:23:04 GMT | x | x | |
| OLE Automation date | 45723.44143763889 | | x | x |
| Excel's 1900 date value | 45723.44143763889 | | x | x |
| Excel's 1904 date value | 44261.44143763889 | | x | x |
**Custom format definition**
The user can create its own formats. One per line in the settings text box. The format of each line is `<name>=<syntax pattern>`.
If the syntax pattern starting with `UTC:` then we use the UTC time instead of the local time.
As syntax pattern the pattern from `DateTime.ToString()` and the following custom pattern are available:
- DOW: Number of the day in the week.
- WOM: Number of week in the month.
- WOY: Number of the week in the year.
- EAB: Era abbreviation.
- WFT: Windows file time.
- UXT: Unix time stamp.
- UMS: Unix time stamp in milliseconds.
- OAD: OLE Automation date.
- EXC: Excel's 1900 based date value.
- EXF: Excel's 1904 based date value.
### Add new formats
- To add a new formats you have to add them to the method `GetList()` of the [`AvailableResultsList`](/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.TimeDate/Components/AvailableResultsList.cs) class.
@@ -73,13 +94,13 @@ The following formats are currently available:
| Key | Type | Default value | Name | Description |
| `CalendarFirstWeekRule` | Combo box | `-1` (Use system settings) | First week of the year | Configure the calendar rule for the first week of the year. |
| `FirstDayOfWeek` | Combo box | `-1` (Use system settings) | First day of the week | |
| `OnlyDateTimeNowGlobal` | Checkbox | `true` | Show only 'Time', 'Date', and 'Now' result for system time on global queries | Regardless of this setting, for global queries the first word of the query has to be a complete match. |
| `TimeWithSeconds` | Checkbox | `false` | Show time with seconds | This setting applies to the 'Time' and 'Now' result. |
| `DateWithWeekday` | Checkbox | `false` | Show date with weekday and name of month | This setting applies to the 'Date' and 'Now' result. |
| `HideNumberMessageOnGlobalQuery` | Checkbox | `false` | Hide 'Invalid number input' error message on global queries | |
| `CalendarFirstWeekRule` | Combo box | `-1` (Use system settings) | First week of the year | Configure the calendar rule for the first week of the year. |
| `FirstDayOfWeek` | Combo box | `-1` (Use system settings) | First day of the week | |
| `CustomFormats` | Multiline text box | `string.Empty` | Custom formats | Use date and time string format syntax and DOW (Day of Week), WOM (Week of Month), WOY (Week of the year), EAB (Era abbreviation), WFT (Windows File Time), UXT (Unix Time), UMS (Unix Time in milliseconds), OAD (OLE Automation date), EXC (Excel's 1900 based date value), EXF (Excel's 1904 based date value). If the format starts with UTC:, then Universal Time (UTC) is used. (Use a backslash to escape format sequences and the backslash character as text.) |
@@ -4,18 +4,10 @@ Contains the executable starting point, initialization code and the list of know
#### [`powertoy_module.h`](/src/runner/powertoy_module.h) and [`powertoy_module.cpp`](/src/runner/powertoy_module.cpp)
Contains code for initializing and managing the PowerToy modules. `PowertoyModule` is a RAII-style holder for the `PowertoyModuleIface` pointer, which we got by [invoking module DLL's `powertoy_create` function](https://github.com/microsoft/PowerToys/blob/1760af50c8803588cb575167baae0439af38a9c1/src/runner/powertoy_module.cpp#L13-L24).
Contains code that handles the various events listeners, and forwards those events to the PowerToys modules. You can learn more about the current event architecture in [shared hooks](/doc/devdocs/shared-hooks.md).
Contains code for registering the low level keyboard event hook that listens for keyboard events. Please note that `signal_event` is called from the main thread for this event.
Contains code for registering a Windows event hook through `SetWinEventHook`, that listens for various events raised when a window is interacted with. Please note, that `signal_event` is called from a separate `dispatch_thread_proc` worker thread, so you must provide thread-safety for your `signal_event` if you intend to receive it. This is a subject to change.
#### [`tray_icon.cpp`](/src/runner/tray_icon.cpp)
Contains code for managing the PowerToys tray icon and its menu commands. Note that `dispatch_run_on_main_ui_thread` is used to
transfer received json message from the [Settings window](/doc/devdocs/settings.md) to the main thread, since we're communicating with it from [a dedicated thread](https://github.com/microsoft/PowerToys/blob/7357e40d3f54de51176efe54fda6d57028837b8c/src/runner/settings_window.cpp#L267-L271).
Contains code for starting the PowerToys settings window and communicating with it. Settings window is a separate process, so we're using [Windows pipes](https://learn.microsoft.com/windows/win32/ipc/pipes) as a transport for json messages.
@@ -33,3 +25,24 @@ Contains code for telemetry.
#### [`svgs`](/src/runner/svgs/)
Contains the SVG assets used by the PowerToys modules.
The Settings v2 process uses two way IPC to communicate with the runner process.
## Initialization
- On the settings' side, the two way IPC delegates are contained with the [`ShellPage.xaml.cs`](/src/settings-ui/Settings.UI/Views/ShellPage.xaml.cs) file. The delegates are static and the views for all the powerToys send the ipc information to the viewmodels as `ShellPage.DefaultSndMSGCallBack`.
- These delegates are initialized within the [`MainWindow.xaml.cs`](/src/settings-ui/Settings.UI/MainWindow.xaml.cs) file in the `Settings.Runner` project.
- On the settings' side, the two way IPC delegates are contained with the [`ShellPage.xaml.cs`](/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs) file. The delegates are static and the views for all the powerToys send the ipc information to the viewmodels as `ShellPage.DefaultSndMSGCallBack`.
- These delegates are initialized within the [`MainWindow.xaml.cs`](/src/settings-ui/Settings.UI/SettingsXAML/MainWindow.xaml.cs) file in the `Settings.Runner` project.
## Types of IPC delegates
@@ -14,12 +14,12 @@ The Settings v2 process uses two way IPC to communicate with the runner process.
3.`CheckForUpdates`
## Sending information to runner
- The settings process communicates with the runner by using the delegates defined within the [`ShellPage.xaml.cs`](/src/settings-ui/Settings.UI/Views/ShellPage.xaml.cs) file.
- The settings process communicates with the runner by using the delegates defined within the [`ShellPage.xaml.cs`](/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs) file.
- Depending on the type of object sending the information, the json is created accordingly.
- If any information has been modified by the user in the GeneralSettings page, then the json file sent to the runner has the name set to `general`, whereas if any information has been modified by the user in any powertoy related settings page, the name of the json file being communicated with the runner is set to `powertoy`.
## Receiving information from runner
- The `ShellPage`object has a `IPCResponseHandleList` which is a list of functions which handle IPC responses.
- The `ShellPage`object has a `IPCResponseHandleList` which is a list of functions which handle IPC responses.
- Whenever any information is sent from the runner each of the functions in the handle list perform their action on that json object.
- One example of where information sent from the runner is being processed by the settings is in [`GeneralPage.xaml.cs`](/src/settings-ui/Settings.UI/Views/GeneralPage.xaml.cs) when the user clicks the check for updates button. The information displayed after, such as the user has the latest version installed is a result of this handle.
- One example of where information sent from the runner is being processed by the settings is in [`GeneralPage.xaml.cs`](/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml.cs) when the user clicks the check for updates button. The information displayed after, such as the user has the latest version installed is a result of this handle.
This command line application generates a report about the connected webcams on the desktop called "WebcamReport.txt". The report contains the following information about every webcam:
@@ -42,6 +42,10 @@ Contact the developers of a plugin directly for assistance with a specific plugi
| [CanIUse](https://github.com/skttl/ptrun-caniuse) | [skttl](https://github.com/skttl) | Look up browser feature support with caniuse.com |
| [TailwindCSS](https://github.com/skttl/ptrun-tailwindcss) | [skttl](https://github.com/skttl) | Search the documentation of TailwindCSS |
| [HttpStatusCodes](https://github.com/grzhan/HttpStatusCodePowerToys) | [grzhan](https://github.com/grzhan) | Search for http status codes |
| [SVGL](https://github.com/Sameerjs6/powertoys-svgl) | [SameerJS6](https://github.com/SameerJS6) | Search, Browse and copy SVG logos from SVGL. |
| [QuickNotes](https://github.com/ruslanlap/CommunityPowerToysRunPlugin-QuickNotes) | [ruslanlap](https://github.com/ruslanlap) | Create, manage, and search notes directly from PowerToys Run. |
| [Weather](https://github.com/ruslanlap/PowerToysRun-Weather) | [ruslanlap](https://github.com/ruslanlap) | Get real-time weather information directly from PowerToys Run. |
@@ -62,3 +66,6 @@ Below are community created plugins that target a website or software. They are
| [HackMD](https://github.com/8LWXpg/PowerToysRun-HackMD) | [8LWXpg](https://github.com/8LWXpg) | Open HackMD notes |
| [SSH](https://github.com/8LWXpg/PowerToysRun-SSH) | [8LWXpg](https://github.com/8LWXpg) | Connect to ssh clients |
| [Bilibili](https://github.com/Whuihuan/PowerToysRun-Bilibili) | [Whuihuan](https://github.com/Whuihuan) | Use AVID or BVID to parse and jump to Bilibili |
| [YubicoOauthOTP](https://github.com/dlnilsson/Community.PowerToys.Run.Plugin.YubicoOauthOTP) | [dlnilsson](https://github.com/dlnilsson) | Display generated codes from OATH accounts stored on the YubiKey in powerToys Run |
| [Firefox Bookmark](https://github.com/8LWXpg/PowerToysRun-FirefoxBookmark) | [8LWXpg](https://github.com/8LWXpg) | Open bookmarks in Firefox based browser |
[Linear](https://github.com/vednig/powertoys-linear) | [vednig](https://github.com/vednig) | Create Linear Issues directly from Powertoys Run |
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
@@ -12,10 +12,10 @@ using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1101:PrefixLocalCallsWithThis", Justification = "We follow the C# Core Coding Style which avoids using `this` unless absolutely necessary.")]
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1201:ElementsMustAppearInTheCorrectOrder", Justification = "It is not a priority and have hight impact in code changes.")]
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "It is not a priority and have hight impact in code changes.")]
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1203:ConstantsMustAppearBeforeFields", Justification = "It is not a priority and have hight impact in code changes.")]
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1204:StaticElementsMustAppearBeforeInstanceElements", Justification = "It is not a priority and have hight impact in code changes.")]
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1201:ElementsMustAppearInTheCorrectOrder", Justification = "It is not a priority and has high impact in code changes.")]
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "It is not a priority and has high impact in code changes.")]
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1203:ConstantsMustAppearBeforeFields", Justification = "It is not a priority and has high impact in code changes.")]
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1204:StaticElementsMustAppearBeforeInstanceElements", Justification = "It is not a priority and has high impact in code changes.")]
[assembly: SuppressMessage("StyleCop.CSharp.NamingRules", "SA1309:FieldNamesMustNotBeginWithUnderscore", Justification = "We follow the C# Core Coding Style which uses underscores as prefixes rather than using `this.`.")]
@@ -62,3 +62,17 @@ using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "<Dotnet port with style preservation>", Scope = "namespaceanddescendants", Target = "MouseWithoutBorders")]
[assembly: SuppressMessage("StyleCop.CSharp.NamingRules", "SA1310:Field names should not contain underscore", Justification = "<Dotnet port with style preservation>", Scope = "namespaceanddescendants", Target = "MouseWithoutBorders")]
[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1649:File name should match first type name", Justification = "<Dotnet port with style preservation>", Scope = "namespaceanddescendants", Target = "MouseWithoutBorders")]
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.