diff --git a/.config/configuration.vsEnterprise.winget b/.config/configuration.vsEnterprise.winget
index 4d19d37137..08c9983562 100644
--- a/.config/configuration.vsEnterprise.winget
+++ b/.config/configuration.vsEnterprise.winget
@@ -2,14 +2,14 @@
# Reference: https://github.com/microsoft/PowerToys/blob/main/doc/devdocs/readme.md#compiling-powertoys
properties:
resources:
- - resource: Microsoft.Windows.Developer/DeveloperMode
+ - resource: Microsoft.Windows.Settings/WindowsSettings
directives:
description: Enable Developer Mode
allowPrerelease: true
# Requires elevation for the set operation
securityContext: elevated
settings:
- Ensure: Present
+ DeveloperMode: true
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: vsPackage
directives:
diff --git a/.config/configuration.vsProfessional.winget b/.config/configuration.vsProfessional.winget
index 78fb1c13d5..4d7e4a31c3 100644
--- a/.config/configuration.vsProfessional.winget
+++ b/.config/configuration.vsProfessional.winget
@@ -2,14 +2,14 @@
# Reference: https://github.com/microsoft/PowerToys/blob/main/doc/devdocs/readme.md#compiling-powertoys
properties:
resources:
- - resource: Microsoft.Windows.Developer/DeveloperMode
+ - resource: Microsoft.Windows.Settings/WindowsSettings
directives:
description: Enable Developer Mode
allowPrerelease: true
# Requires elevation for the set operation
securityContext: elevated
settings:
- Ensure: Present
+ DeveloperMode: true
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: vsPackage
directives:
diff --git a/.config/configuration.winget b/.config/configuration.winget
index 456eca47f2..2016dcdc33 100644
--- a/.config/configuration.winget
+++ b/.config/configuration.winget
@@ -2,14 +2,14 @@
# Reference: https://github.com/microsoft/PowerToys/blob/main/doc/devdocs/readme.md#compiling-powertoys
properties:
resources:
- - resource: Microsoft.Windows.Developer/DeveloperMode
+ - resource: Microsoft.Windows.Settings/WindowsSettings
directives:
description: Enable Developer Mode
allowPrerelease: true
# Requires elevation for the set operation
securityContext: elevated
settings:
- Ensure: Present
+ DeveloperMode: true
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: vsPackage
directives:
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index e55d081c91..5e5ea03e7e 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -12,7 +12,7 @@ body:
attributes:
label: Microsoft PowerToys version
placeholder: X.XX.X
- description: Hover over system tray icon or look at Settings
+ description: Hover over the system tray icon or look at Settings
validations:
required: true
@@ -20,7 +20,7 @@ body:
type: dropdown
attributes:
label: Installation method
- description: How / Where was PowerToys installed from?
+ description: How / where was PowerToys installed from?
multiple: true
options:
- GitHub
diff --git a/.github/ISSUE_TEMPLATE/documentation-issue.yml b/.github/ISSUE_TEMPLATE/documentation-issue.yml
index 151fc5a1f7..583cf54811 100644
--- a/.github/ISSUE_TEMPLATE/documentation-issue.yml
+++ b/.github/ISSUE_TEMPLATE/documentation-issue.yml
@@ -6,7 +6,7 @@ labels:
body:
- type: textarea
attributes:
- label: Provide a description of requested docs changes
+ label: Describe the requested doc changes
placeholder: Briefly describe which document needs to be corrected and why.
validations:
required: true
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index d7d092dbca..a2c7db9cc5 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -13,7 +13,7 @@ body:
- type: textarea
attributes:
label: Scenario when this would be used?
- placeholder: What is the scenario this would be used? Why is this important to your workflow as a power user?
+ placeholder: What is the scenario this would be used in? Why is this important to your workflow as a power user?
validations:
required: true
- type: textarea
diff --git a/.github/ISSUE_TEMPLATE/translation_issue.yml b/.github/ISSUE_TEMPLATE/translation_issue.yml
index ffddacb9aa..1fdefbff8b 100644
--- a/.github/ISSUE_TEMPLATE/translation_issue.yml
+++ b/.github/ISSUE_TEMPLATE/translation_issue.yml
@@ -14,7 +14,7 @@ body:
attributes:
label: Microsoft PowerToys version
placeholder: 0.70.0
- description: Hover over system tray icon or look at Settings
+ description: Hover over the system tray icon or look at Settings
validations:
required: true
- type: dropdown
@@ -65,7 +65,7 @@ body:
- type: textarea
attributes:
label: ❌ Actual phrase(s)
- placeholder: What is there? Please include a screenshot as that is extremely helpful.
+ placeholder: What is there? Please include a screenshot, as that is extremely helpful.
validations:
required: true
- type: textarea
diff --git a/.github/actions/spell-check/allow/code.txt b/.github/actions/spell-check/allow/code.txt
index 78ddf93b32..847e329ffa 100644
--- a/.github/actions/spell-check/allow/code.txt
+++ b/.github/actions/spell-check/allow/code.txt
@@ -273,6 +273,11 @@ mengyuanchen
# DllName
testhost
+Testably
#Tools
-OIP
\ No newline at end of file
+OIP
+xef
+xes
+PACKAGEVERSIONNUMBER
+APPXMANIFESTVERSION
diff --git a/.github/actions/spell-check/allow/names.txt b/.github/actions/spell-check/allow/names.txt
index eeda5b9ae1..f570a231af 100644
--- a/.github/actions/spell-check/allow/names.txt
+++ b/.github/actions/spell-check/allow/names.txt
@@ -46,8 +46,8 @@ betsegaw
bricelam
bsky
CCcat
-chenmy
chemwolf
+chenmy
Chinh
chrdavis
Chrzan
@@ -65,8 +65,8 @@ Deondre
DHowett
ductdo
Essey
-Feng
ethanfangg
+Feng
ferraridavide
foxmsft
frankychen
@@ -77,6 +77,7 @@ Galaxi
Garside
Gershaft
Giordani
+Gleb
Gokce
gordon
Griese
@@ -90,12 +91,15 @@ Hemmerlein
hlaueriksson
Horvalds
Howett
+hotkidfamily
htcfreek
Huynh
Ionut
jamrobot
Jaswal
+Jaylyn
jefflord
+Jeremic
Jordi
jyuwono
kai
@@ -105,6 +109,7 @@ Kantarci
Karthick
kaylacinnamon
kevinguo
+Khmyznikov
Krigun
Lambson
Laute
@@ -127,6 +132,8 @@ Naro
nathancartlidge
Nemeth
nielslaute
+Noraa
+noraajunker
oldnewthing
onegreatworld
palenshus
@@ -146,11 +153,13 @@ ricardosantos
riri
ritchielawrence
robmikh
+ruslanlap
Russinovich
Rutkas
ryanbodrug
saahmedm
sachaple
+Sameerjs
Santossio
Schoen
Sekan
@@ -166,9 +175,11 @@ Tadele
talynone
Taras
TBM
+Teutsch
tilovell
Triet
urnotdfs
+vednig
waaverecords
wang
Whuihuan
@@ -187,9 +198,6 @@ zhaopy
zhaoqpcn
Zoltan
Zykova
-Sameerjs
-ruslanlap
-vednig
# OTHERS
@@ -216,6 +224,7 @@ openai
Quickime
regedit
roslyn
+Skia
Spotify
Vanara
wangyi
diff --git a/.github/actions/spell-check/excludes.txt b/.github/actions/spell-check/excludes.txt
index 21d7da66b8..f5710e72ce 100644
--- a/.github/actions/spell-check/excludes.txt
+++ b/.github/actions/spell-check/excludes.txt
@@ -92,6 +92,7 @@
^\.github/actions/spell-check/
^\.gitmodules$
^\Q.github/workflows/spelling2.yml\E$
+^\Q.pipelines/272MSSharedLibSN2048.snk\E$
^\Q.pipelines/ESRPSigning_core.json\E$
^\Qdoc/devdocs/localization.md\E$
^\Qsrc/common/ManagedCommon/ColorFormatHelper.cs\E$
@@ -120,7 +121,9 @@
^src/modules/MouseWithoutBorders/App/Form/.*\.resx$
^src/modules/MouseWithoutBorders/App/Helper/.*\.resx$
^src/modules/previewpane/UnitTests-MarkdownPreviewHandler/HelperFiles/MarkdownWithHTMLImageTag\.txt$
+^src/modules/ZoomIt/ZoomIt/ZoomIt\.idc$
^src/Monaco/
^src/common/sysinternals/Eula/
^tools/Verification scripts/Check preview handler registration\.ps1$
ignore$
+^src/modules/registrypreview/RegistryPreviewUILib/Controls/HexBox/.*$
diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt
index bdae0338be..a081d3fcd1 100644
--- a/.github/actions/spell-check/expect.txt
+++ b/.github/actions/spell-check/expect.txt
@@ -14,6 +14,7 @@ AColumn
acrt
ACTIVATEAPP
activationaction
+ACTIVATEOPTIONS
ACVS
adaptivecards
ADate
@@ -68,6 +69,7 @@ appwiz
APSTUDIO
AQS
ARandom
+Arash
ARCHITEW
ARemapped
ARPINSTALLLOCATION
@@ -154,6 +156,7 @@ builttoroam
BVal
BValue
byapp
+BYCOMMAND
BYPOSITION
CALCRECT
CALG
@@ -189,6 +192,7 @@ CImage
cla
CLASSDC
CLASSNOTAVAILABLE
+cleanmgr
clickable
clickonce
CLIENTEDGE
@@ -200,6 +204,7 @@ CLIPSIBLINGS
closesocket
clp
CLSCTX
+CLSCTXLOCALSERVER
clsids
Clusion
cmder
@@ -273,6 +278,7 @@ currentculture
CURRENTDIR
CURSORINFO
cursorpos
+CURSORSHOWING
customaction
CUSTOMACTIONTEST
CUSTOMFORMATPLACEHOLDER
@@ -327,7 +333,6 @@ DEFAULTTONULL
DEFAULTTOPRIMARY
DEFERERASE
DEFPUSHBUTTON
-DEFT
deinitialization
DELA
DELETEDKEYIMAGE
@@ -341,7 +346,9 @@ DESELECTOTHERS
DESIGNINFO
DESKTOPABSOLUTEEDITING
DESKTOPABSOLUTEPARSING
+DESKTOPHORZRES
desktopshorcutinstalled
+DESKTOPVERTRES
devblogs
devdocs
devmgmt
@@ -352,6 +359,7 @@ DFX
DIALOGEX
digicert
dimm
+DINORMAL
DISABLEASACTIONKEY
DISABLENOSCROLL
diskmgmt
@@ -395,6 +403,7 @@ DVASPECTINFO
DVD
dvr
DVTARGETDEVICE
+dwflags
dwl
dwm
dwmapi
@@ -469,6 +478,7 @@ EXPCMDFLAGS
EXPCMDSTATE
explr
exppowertoys
+exprtk
exptas
exsb
exstyle
@@ -482,6 +492,7 @@ FANCYZONESDRAWLAYOUTTEST
FANCYZONESEDITOR
FARPROC
fff
+FFFF
FILEEXPLORER
FILEFLAGS
FILEFLAGSMASK
@@ -600,6 +611,7 @@ helptext
HGFE
hglobal
hhk
+HHmmssfff
hhx
Hiber
Hiberboot
@@ -608,6 +620,7 @@ hicon
HIDEREADONLY
HIDEWINDOW
Hif
+hightlight
HIMAGELIST
himl
hinst
@@ -669,7 +682,6 @@ IBeam
icf
ICONERROR
ICONLOCATION
-idc
IDCANCEL
IDD
idk
@@ -680,7 +692,6 @@ IDR
IDXGI
ietf
IEXPLORE
-iextn
IFACEMETHOD
IFACEMETHODIMP
IFile
@@ -719,7 +730,6 @@ INPUTMOUSE
INPUTSINK
INPUTTYPE
INSTALLDESKTOPSHORTCUT
-INSTALLDIR
installdir
INSTALLFOLDER
INSTALLFOLDERTOBOOTSTRAPPERINSTALLFOLDER
@@ -745,6 +755,7 @@ isocpp
iss
issecret
ISSEPARATOR
+istep
ith
ITHUMBNAIL
IUI
@@ -755,6 +766,7 @@ iwr
jfif
jgeosdfsdsgmkedfgdfgdfgbkmhcgcflmi
jjw
+JLO
jobject
jpe
jpnime
@@ -788,6 +800,7 @@ LCIDTo
Lclean
Ldone
Ldr
+LEFTALIGN
LEFTSCROLLBAR
LEFTTEXT
LError
@@ -810,11 +823,11 @@ LMENU
lnks
LOADFROMFILE
LOBYTE
-localappdata
LOCALDISPLAY
localpackage
LOCALSYSTEM
LOCATIONCHANGE
+LOCKTYPE
LOGFONT
LOGFONTW
logon
@@ -910,6 +923,7 @@ metafile
mfc
Mgmt
Microwaved
+middleclickaction
midl
mii
mindaro
@@ -975,7 +989,6 @@ msrc
msstore
mst
msvcp
-msvsmon
MTND
MULTIPLEUSE
multizone
@@ -1153,6 +1166,7 @@ PARTIALCONFIRMATIONDIALOGTITLE
PATCOPY
PATHMUSTEXIST
PATINVERT
+partow
PATPAINT
pbc
pbi
@@ -1251,6 +1265,7 @@ prg
prgh
prgms
pri
+primaryclickaction
PRINTCLIENT
printmanagement
prm
@@ -1272,6 +1287,7 @@ prvpane
psapi
pscid
PSECURITY
+psexec
psfgao
psfi
PSMODULEPATH
@@ -1282,7 +1298,6 @@ pstm
PStr
pstream
pstrm
-pswd
PSYSTEM
psz
ptb
@@ -1427,6 +1442,7 @@ SDKDDK
sdns
searchterm
SEARCHUI
+secondaryclickaction
SECONDARYDISPLAY
secpol
securestring
@@ -1474,16 +1490,12 @@ SHELLDLL
shellex
SHELLEXECUTEINFO
SHELLEXECUTEINFOW
-SHELLEXTENSION
SHELLICONSIZE
-SHELLNEWVALUE
SHFILEINFO
SHFILEOPSTRUCT
SHGDN
SHGDNF
SHGFI
-SHGFIICON
-SHGFILARGEICON
SHIL
shinfo
shlwapi
@@ -1515,9 +1527,9 @@ SICHINT
SIDs
siex
sigdn
+Signedness
SIGNINGSCENARIO
signtool
-Signtool
SINGLEKEY
sipolicy
SIZEBOX
@@ -1533,8 +1545,10 @@ SLGP
sln
SMALLICON
smartphone
+smileys
SMTO
SNAPPROCESS
+snk
snwprintf
softline
SOURCECLIENTAREAONLY
@@ -1587,6 +1601,7 @@ steamapps
STGC
STGM
STGMEDIUM
+STGMREAD
STICKYKEYS
sticpl
storelogo
@@ -1663,6 +1678,7 @@ TDefault
TDevice
telephon
templatenamespace
+TESTONLY
testprocess
TEXCOORD
TEXTBOXNEWLINE
@@ -1715,6 +1731,7 @@ trx
tsa
TSender
TServer
+tskill
tstoi
TStr
tweakme
@@ -1778,7 +1795,6 @@ uxtheme
vabdq
validmodulename
valuegenerator
-VARENUM
variantassignment
vcamp
VCENTER
@@ -1874,6 +1890,7 @@ WINDOWPOSCHANGING
WINDOWSBUILDNUMBER
windowssearch
windowssettings
+windowsterminal
WINDOWSTYLES
WINDOWSTYLESICON
winerror
@@ -1948,6 +1965,7 @@ Wwanpp
XAxis
xclip
xcopy
+XDeployment
XDocument
XElement
xfd
@@ -1983,6 +2001,7 @@ Zoneszonabletester
Zoomin
zoomit
ZOOMITX
+Zorder
ZXk
ZXNs
zzz
@@ -1994,3 +2013,10 @@ culori
Evercoder
LCh
CIELCh
+CLSCTXINPROCALL
+IIDI
+irow
+lcid
+ppwsz
+rguid
+VARTYPE
diff --git a/.github/actions/spell-check/patterns.txt b/.github/actions/spell-check/patterns.txt
index 5a6f4785b1..6bd99fb83e 100644
--- a/.github/actions/spell-check/patterns.txt
+++ b/.github/actions/spell-check/patterns.txt
@@ -243,4 +243,4 @@ Process Process
# ZoomIt menu items with accelerator keys
E&xit
-St&yle
\ No newline at end of file
+St&yle
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 0cff106acb..2db246d63b 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -5,9 +5,9 @@
## PR Checklist
- [ ] **Closes:** #xxx
-- [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected
+- [ ] **Communication:** I've discussed this with core contributors already. If the 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
+- [ ] **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
@@ -16,7 +16,7 @@
- [ ] [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
-
+
## Detailed Description of the Pull Request / Additional comments
diff --git a/.github/workflows/package-submissions.yml b/.github/workflows/package-submissions.yml
index b03c18b78b..a2d401faa4 100644
--- a/.github/workflows/package-submissions.yml
+++ b/.github/workflows/package-submissions.yml
@@ -1,5 +1,4 @@
name: WinGet submission on release
-# based off of https://github.com/nushell/nushell/blob/main/.github/workflows/winget-submission.yml
on:
workflow_dispatch:
@@ -9,23 +8,31 @@ on:
jobs:
winget:
name: Publish winget package
+
+ # winget-create is only supported on Windows
runs-on: windows-latest
+
+ # winget-create will read the following environment variable to access the GitHub token needed for submitting a PR
+ # See https://aka.ms/winget-create-token
+ env:
+ WINGET_CREATE_GITHUB_TOKEN: ${{ secrets.PT_WINGET }}
+
+ # Only submit stable releases
+ if: ${{ !github.event.release.prerelease }}
steps:
- name: Submit Microsoft.PowerToys package to Windows Package Manager Community Repository
run: |
+ # Get installer info from GitHub release event
+ $assets = '${{ toJSON(github.event.release.assets) }}' | ConvertFrom-Json
+ $x64UserInstallerUrl = $assets | Where-Object -Property name -match 'PowerToysUserSetup.*x64' | Select -ExpandProperty browser_download_url
+ $x64MachineInstallerUrl = $assets | Where-Object -Property name -match 'PowerToysSetup.*x64' | Select -ExpandProperty browser_download_url
+ $arm64UserInstallerUrl = $assets | Where-Object -Property name -match 'PowerToysUserSetup.*arm64' | Select -ExpandProperty browser_download_url
+ $arm64MachineInstallerUrl = $assets | Where-Object -Property name -match 'PowerToysSetup.*arm64' | Select -ExpandProperty browser_download_url
+ $packageVersion = (${{ toJSON(github.event.release.tag_name) }}).Trim('v')
- $wingetPackage = "Microsoft.PowerToys"
- $gitToken = "${{ secrets.PT_WINGET }}"
-
- $github = Invoke-RestMethod -uri "https://api.github.com/repos/Microsoft/PowerToys/releases"
-
- $targetRelease = $github | Where-Object -Property name -match 'Release'| Select -First 1
- $installerUserX64Url = $targetRelease | Select -ExpandProperty assets -First 1 | Where-Object -Property name -match 'PowerToysUserSetup.*x64' | Select -ExpandProperty browser_download_url
- $installerMachineX64Url = $targetRelease | Select -ExpandProperty assets -First 1 | Where-Object -Property name -match 'PowerToysSetup.*x64' | Select -ExpandProperty browser_download_url
- $installerUserArmUrl = $targetRelease | Select -ExpandProperty assets -First 1 | Where-Object -Property name -match 'PowerToysUserSetup.*arm64' | Select -ExpandProperty browser_download_url
- $installerMachineArmUrl = $targetRelease | Select -ExpandProperty assets -First 1 | Where-Object -Property name -match 'PowerToysSetup.*arm64' | Select -ExpandProperty browser_download_url
- $ver = $targetRelease.tag_name -ireplace '^v'
-
- # getting latest wingetcreate file
- iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe
- .\wingetcreate.exe update $wingetPackage -s -v $ver -u "$installerUserX64Url|user" "$installerMachineX64Url|machine" "$installerUserArmUrl|user" "$installerMachineArmUrl|machine" -t $gitToken
+ # Update package using wingetcreate
+ curl.exe -JLO https://aka.ms/wingetcreate/latest
+ .\wingetcreate.exe update Microsoft.PowerToys `
+ --version $packageVersion `
+ --urls "$x64UserInstallerUrl|user" "$x64MachineInstallerUrl|machine" "$arm64UserInstallerUrl|user" "$arm64MachineInstallerUrl|machine" `
+ --submit
diff --git a/.github/workflows/spelling2.yml b/.github/workflows/spelling2.yml
index 03bb66fff6..cd2b6d5b0f 100644
--- a/.github/workflows/spelling2.yml
+++ b/.github/workflows/spelling2.yml
@@ -93,7 +93,7 @@ jobs:
steps:
- name: check-spelling
id: spelling
- uses: check-spelling/check-spelling@67debf50669c7fc76fc8f5d7f996384535a72b77 # v0.0.24
+ uses: check-spelling/check-spelling@c635c2f3f714eec2fcf27b643a1919b9a811ef2e # v0.0.25
with:
config: .github/actions/spell-check
suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }}
@@ -156,7 +156,7 @@ jobs:
if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push'
steps:
- name: comment
- uses: check-spelling/check-spelling@67debf50669c7fc76fc8f5d7f996384535a72b77 # v0.0.24
+ uses: check-spelling/check-spelling@c635c2f3f714eec2fcf27b643a1919b9a811ef2e # v0.0.25
with:
config: .github/actions/spell-check
checkout: true
@@ -175,7 +175,7 @@ jobs:
if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request')
steps:
- name: comment
- uses: check-spelling/check-spelling@67debf50669c7fc76fc8f5d7f996384535a72b77 # v0.0.24
+ uses: check-spelling/check-spelling@c635c2f3f714eec2fcf27b643a1919b9a811ef2e # v0.0.25
with:
config: .github/actions/spell-check
checkout: true
@@ -202,7 +202,7 @@ jobs:
cancel-in-progress: false
steps:
- name: apply spelling updates
- uses: check-spelling/check-spelling@67debf50669c7fc76fc8f5d7f996384535a72b77 # v0.0.24
+ uses: check-spelling/check-spelling@c635c2f3f714eec2fcf27b643a1919b9a811ef2e # v0.0.25
with:
experimental_apply_changes_via_bot: ${{ github.repository_owner != 'microsoft' && 1 }}
checkout: true
diff --git a/.pipelines/272MSSharedLibSN2048.snk b/.pipelines/272MSSharedLibSN2048.snk
new file mode 100644
index 0000000000..bd766f84a2
Binary files /dev/null and b/.pipelines/272MSSharedLibSN2048.snk differ
diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json
index 615b5633bf..944bbda8b7 100644
--- a/.pipelines/ESRPSigning_core.json
+++ b/.pipelines/ESRPSigning_core.json
@@ -3,226 +3,228 @@
"UseMinimatch": false,
"SignBatches": [
{
- "MatchedPath": [
- "*.resources.dll",
-
- "WinUI3Apps\\Assets\\Settings\\Scripts\\*.ps1",
+ "MatchedPath": [
+ "*.resources.dll",
- "PowerToys.ActionRunner.exe",
- "PowerToys.Update.exe",
- "PowerToys.BackgroundActivatorDLL.dll",
- "Notifications.dll",
- "os-detection.dll",
- "PowerToys.exe",
- "PowerToys.FilePreviewCommon.dll",
- "PowerToys.Interop.dll",
- "Tools\\PowerToys.BugReportTool.exe",
- "StylesReportTool\\PowerToys.StylesReportTool.exe",
- "Telemetry.dll",
- "PowerToys.ManagedTelemetry.dll",
- "PowerToys.ManagedCommon.dll",
- "PowerToys.Common.UI.dll",
- "PowerToys.Settings.UI.Lib.dll",
- "PowerToys.GPOWrapper.dll",
- "PowerToys.GPOWrapperProjection.dll",
- "PowerToys.AllExperiments.dll",
+ "WinUI3Apps\\Assets\\Settings\\Scripts\\*.ps1",
- "PowerToys.AlwaysOnTop.exe",
- "PowerToys.AlwaysOnTopModuleInterface.dll",
+ "PowerToys.ActionRunner.exe",
+ "PowerToys.Update.exe",
+ "PowerToys.BackgroundActivatorDLL.dll",
+ "Notifications.dll",
+ "os-detection.dll",
+ "PowerToys.exe",
+ "PowerToys.FilePreviewCommon.dll",
+ "PowerToys.Interop.dll",
+ "Tools\\PowerToys.BugReportTool.exe",
+ "StylesReportTool\\PowerToys.StylesReportTool.exe",
+ "Telemetry.dll",
+ "CalculatorEngineCommon.dll",
+ "PowerToys.ManagedTelemetry.dll",
+ "PowerToys.ManagedCommon.dll",
+ "PowerToys.ManagedCsWin32.dll",
+ "PowerToys.Common.UI.dll",
+ "PowerToys.Settings.UI.Lib.dll",
+ "PowerToys.GPOWrapper.dll",
+ "PowerToys.GPOWrapperProjection.dll",
+ "PowerToys.AllExperiments.dll",
- "PowerToys.CmdNotFoundModuleInterface.dll",
- "PowerToys.CmdNotFound.dll",
+ "PowerToys.AlwaysOnTop.exe",
+ "PowerToys.AlwaysOnTopModuleInterface.dll",
- "PowerToys.ColorPicker.dll",
- "PowerToys.ColorPickerUI.dll",
- "PowerToys.ColorPickerUI.exe",
+ "PowerToys.CmdNotFoundModuleInterface.dll",
+ "PowerToys.CmdNotFound.dll",
- "PowerToys.CropAndLockModuleInterface.dll",
- "PowerToys.CropAndLock.exe",
+ "PowerToys.ColorPicker.dll",
+ "PowerToys.ColorPickerUI.dll",
+ "PowerToys.ColorPickerUI.exe",
- "PowerToys.PowerOCRModuleInterface.dll",
- "PowerToys.PowerOCR.dll",
- "PowerToys.PowerOCR.exe",
+ "PowerToys.CropAndLockModuleInterface.dll",
+ "PowerToys.CropAndLock.exe",
- "PowerToys.AdvancedPasteModuleInterface.dll",
- "WinUI3Apps\\PowerToys.AdvancedPaste.exe",
- "WinUI3Apps\\PowerToys.AdvancedPaste.dll",
+ "PowerToys.PowerOCRModuleInterface.dll",
+ "PowerToys.PowerOCR.dll",
+ "PowerToys.PowerOCR.exe",
- "PowerToys.AwakeModuleInterface.dll",
- "PowerToys.Awake.exe",
- "PowerToys.Awake.dll",
+ "PowerToys.AdvancedPasteModuleInterface.dll",
+ "WinUI3Apps\\PowerToys.AdvancedPaste.exe",
+ "WinUI3Apps\\PowerToys.AdvancedPaste.dll",
- "fancyzones.dll",
- "PowerToys.FancyZonesEditor.exe",
- "PowerToys.FancyZonesEditor.dll",
- "PowerToys.FancyZonesEditorCommon.dll",
- "PowerToys.FancyZonesModuleInterface.dll",
- "PowerToys.FancyZones.exe",
+ "PowerToys.AwakeModuleInterface.dll",
+ "PowerToys.Awake.exe",
+ "PowerToys.Awake.dll",
- "PowerToys.GcodePreviewHandler.dll",
- "PowerToys.GcodePreviewHandler.exe",
- "PowerToys.GcodePreviewHandlerCpp.dll",
- "PowerToys.GcodeThumbnailProvider.dll",
- "PowerToys.GcodeThumbnailProvider.exe",
- "PowerToys.GcodeThumbnailProviderCpp.dll",
- "PowerToys.ManagedTelemetry.dll",
- "PowerToys.MarkdownPreviewHandler.dll",
- "PowerToys.MarkdownPreviewHandler.exe",
- "PowerToys.MarkdownPreviewHandlerCpp.dll",
- "PowerToys.MonacoPreviewHandler.dll",
- "PowerToys.MonacoPreviewHandler.exe",
- "PowerToys.MonacoPreviewHandlerCpp.dll",
- "PowerToys.PdfPreviewHandler.dll",
- "PowerToys.PdfPreviewHandler.exe",
- "PowerToys.PdfPreviewHandlerCpp.dll",
- "PowerToys.PdfThumbnailProvider.dll",
- "PowerToys.PdfThumbnailProvider.exe",
- "PowerToys.PdfThumbnailProviderCpp.dll",
- "PowerToys.powerpreview.dll",
- "PowerToys.PreviewHandlerCommon.dll",
- "PowerToys.QoiPreviewHandler.dll",
- "PowerToys.QoiPreviewHandler.exe",
- "PowerToys.QoiPreviewHandlerCpp.dll",
- "PowerToys.QoiThumbnailProvider.dll",
- "PowerToys.QoiThumbnailProvider.exe",
- "PowerToys.QoiThumbnailProviderCpp.dll",
- "PowerToys.StlThumbnailProvider.dll",
- "PowerToys.StlThumbnailProvider.exe",
- "PowerToys.StlThumbnailProviderCpp.dll",
- "PowerToys.SvgPreviewHandler.dll",
- "PowerToys.SvgPreviewHandler.exe",
- "PowerToys.SvgPreviewHandlerCpp.dll",
- "PowerToys.SvgThumbnailProvider.dll",
- "PowerToys.SvgThumbnailProvider.exe",
- "PowerToys.SvgThumbnailProviderCpp.dll",
+ "fancyzones.dll",
+ "PowerToys.FancyZonesEditor.exe",
+ "PowerToys.FancyZonesEditor.dll",
+ "PowerToys.FancyZonesEditorCommon.dll",
+ "PowerToys.FancyZonesModuleInterface.dll",
+ "PowerToys.FancyZones.exe",
- "WinUI3Apps\\PowerToys.HostsModuleInterface.dll",
- "WinUI3Apps\\PowerToys.HostsUILib.dll",
- "WinUI3Apps\\PowerToys.Hosts.dll",
- "WinUI3Apps\\PowerToys.Hosts.exe",
+ "PowerToys.GcodePreviewHandler.dll",
+ "PowerToys.GcodePreviewHandler.exe",
+ "PowerToys.GcodePreviewHandlerCpp.dll",
+ "PowerToys.GcodeThumbnailProvider.dll",
+ "PowerToys.GcodeThumbnailProvider.exe",
+ "PowerToys.GcodeThumbnailProviderCpp.dll",
+ "PowerToys.ManagedTelemetry.dll",
+ "PowerToys.MarkdownPreviewHandler.dll",
+ "PowerToys.MarkdownPreviewHandler.exe",
+ "PowerToys.MarkdownPreviewHandlerCpp.dll",
+ "PowerToys.MonacoPreviewHandler.dll",
+ "PowerToys.MonacoPreviewHandler.exe",
+ "PowerToys.MonacoPreviewHandlerCpp.dll",
+ "PowerToys.PdfPreviewHandler.dll",
+ "PowerToys.PdfPreviewHandler.exe",
+ "PowerToys.PdfPreviewHandlerCpp.dll",
+ "PowerToys.PdfThumbnailProvider.dll",
+ "PowerToys.PdfThumbnailProvider.exe",
+ "PowerToys.PdfThumbnailProviderCpp.dll",
+ "PowerToys.powerpreview.dll",
+ "PowerToys.PreviewHandlerCommon.dll",
+ "PowerToys.QoiPreviewHandler.dll",
+ "PowerToys.QoiPreviewHandler.exe",
+ "PowerToys.QoiPreviewHandlerCpp.dll",
+ "PowerToys.QoiThumbnailProvider.dll",
+ "PowerToys.QoiThumbnailProvider.exe",
+ "PowerToys.QoiThumbnailProviderCpp.dll",
+ "PowerToys.StlThumbnailProvider.dll",
+ "PowerToys.StlThumbnailProvider.exe",
+ "PowerToys.StlThumbnailProviderCpp.dll",
+ "PowerToys.SvgPreviewHandler.dll",
+ "PowerToys.SvgPreviewHandler.exe",
+ "PowerToys.SvgPreviewHandlerCpp.dll",
+ "PowerToys.SvgThumbnailProvider.dll",
+ "PowerToys.SvgThumbnailProvider.exe",
+ "PowerToys.SvgThumbnailProviderCpp.dll",
- "WinUI3Apps\\PowerToys.FileLocksmithLib.Interop.dll",
- "WinUI3Apps\\PowerToys.FileLocksmithExt.dll",
- "WinUI3Apps\\PowerToys.FileLocksmithUI.exe",
- "WinUI3Apps\\PowerToys.FileLocksmithUI.dll",
- "WinUI3Apps\\PowerToys.FileLocksmithContextMenu.dll",
- "FileLocksmithContextMenuPackage.msix",
+ "WinUI3Apps\\PowerToys.HostsModuleInterface.dll",
+ "WinUI3Apps\\PowerToys.HostsUILib.dll",
+ "WinUI3Apps\\PowerToys.Hosts.dll",
+ "WinUI3Apps\\PowerToys.Hosts.exe",
- "WinUI3Apps\\Peek.Common.dll",
- "WinUI3Apps\\Peek.FilePreviewer.dll",
- "WinUI3Apps\\Powertoys.Peek.UI.dll",
- "WinUI3Apps\\Powertoys.Peek.UI.exe",
- "WinUI3Apps\\Powertoys.Peek.dll",
+ "WinUI3Apps\\PowerToys.FileLocksmithLib.Interop.dll",
+ "WinUI3Apps\\PowerToys.FileLocksmithExt.dll",
+ "WinUI3Apps\\PowerToys.FileLocksmithUI.exe",
+ "WinUI3Apps\\PowerToys.FileLocksmithUI.dll",
+ "WinUI3Apps\\PowerToys.FileLocksmithContextMenu.dll",
+ "FileLocksmithContextMenuPackage.msix",
- "WinUI3Apps\\PowerToys.EnvironmentVariablesModuleInterface.dll",
- "WinUI3Apps\\PowerToys.EnvironmentVariablesUILib.dll",
- "WinUI3Apps\\PowerToys.EnvironmentVariables.dll",
- "WinUI3Apps\\PowerToys.EnvironmentVariables.exe",
+ "WinUI3Apps\\Peek.Common.dll",
+ "WinUI3Apps\\Peek.FilePreviewer.dll",
+ "WinUI3Apps\\Powertoys.Peek.UI.dll",
+ "WinUI3Apps\\Powertoys.Peek.UI.exe",
+ "WinUI3Apps\\Powertoys.Peek.dll",
- "PowerToys.ImageResizer.exe",
- "PowerToys.ImageResizer.dll",
- "PowerToys.ImageResizerExt.dll",
- "PowerToys.ImageResizerContextMenu.dll",
- "ImageResizerContextMenuPackage.msix",
+ "WinUI3Apps\\PowerToys.EnvironmentVariablesModuleInterface.dll",
+ "WinUI3Apps\\PowerToys.EnvironmentVariablesUILib.dll",
+ "WinUI3Apps\\PowerToys.EnvironmentVariables.dll",
+ "WinUI3Apps\\PowerToys.EnvironmentVariables.exe",
- "PowerToys.KeyboardManager.dll",
- "KeyboardManagerEditor\\PowerToys.KeyboardManagerEditor.exe",
- "KeyboardManagerEngine\\PowerToys.KeyboardManagerEngine.exe",
- "PowerToys.KeyboardManagerEditorLibraryWrapper.dll",
+ "PowerToys.ImageResizer.exe",
+ "PowerToys.ImageResizer.dll",
+ "PowerToys.ImageResizerExt.dll",
+ "PowerToys.ImageResizerContextMenu.dll",
+ "ImageResizerContextMenuPackage.msix",
- "PowerToys.Launcher.dll",
- "PowerToys.PowerLauncher.dll",
- "PowerToys.PowerLauncher.exe",
- "PowerToys.PowerLauncher.Telemetry.dll",
- "Wox.dll",
- "Wox.Infrastructure.dll",
- "Wox.Plugin.dll",
- "RunPlugins\\Calculator\\Microsoft.PowerToys.Run.Plugin.Calculator.dll",
- "RunPlugins\\Folder\\Microsoft.Plugin.Folder.dll",
- "RunPlugins\\Indexer\\Microsoft.Plugin.Indexer.dll",
- "RunPlugins\\OneNote\\Microsoft.PowerToys.Run.Plugin.OneNote.dll",
- "RunPlugins\\History\\Microsoft.PowerToys.Run.Plugin.History.dll",
- "RunPlugins\\PowerToys\\Microsoft.PowerToys.Run.Plugin.PowerToys.dll",
- "RunPlugins\\Program\\Microsoft.Plugin.Program.dll",
- "RunPlugins\\Registry\\Microsoft.PowerToys.Run.Plugin.Registry.dll",
- "RunPlugins\\WindowsSettings\\Microsoft.PowerToys.Run.Plugin.WindowsSettings.dll",
- "RunPlugins\\Shell\\Microsoft.Plugin.Shell.dll",
- "RunPlugins\\Uri\\Microsoft.Plugin.Uri.dll",
- "RunPlugins\\WindowWalker\\Microsoft.Plugin.WindowWalker.dll",
- "RunPlugins\\UnitConverter\\Community.PowerToys.Run.Plugin.UnitConverter.dll",
- "RunPlugins\\VSCodeWorkspaces\\Community.PowerToys.Run.Plugin.VSCodeWorkspaces.dll",
- "RunPlugins\\Service\\Microsoft.PowerToys.Run.Plugin.Service.dll",
- "RunPlugins\\System\\Microsoft.PowerToys.Run.Plugin.System.dll",
- "RunPlugins\\TimeDate\\Microsoft.PowerToys.Run.Plugin.TimeDate.dll",
- "RunPlugins\\ValueGenerator\\Community.PowerToys.Run.Plugin.ValueGenerator.dll",
- "RunPlugins\\WebSearch\\Community.PowerToys.Run.Plugin.WebSearch.dll",
- "RunPlugins\\WindowsTerminal\\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.dll",
-
- "WinUI3Apps\\PowerToys.MeasureToolModuleInterface.dll",
- "WinUI3Apps\\PowerToys.MeasureToolCore.dll",
- "WinUI3Apps\\PowerToys.MeasureToolUI.dll",
- "WinUI3Apps\\PowerToys.MeasureToolUI.exe",
+ "PowerToys.KeyboardManager.dll",
+ "KeyboardManagerEditor\\PowerToys.KeyboardManagerEditor.exe",
+ "KeyboardManagerEngine\\PowerToys.KeyboardManagerEngine.exe",
+ "PowerToys.KeyboardManagerEditorLibraryWrapper.dll",
- "PowerToys.FindMyMouse.dll",
- "PowerToys.MouseHighlighter.dll",
- "PowerToys.MouseJump.dll",
- "PowerToys.MouseJump.Common.dll",
- "PowerToys.MousePointerCrosshairs.dll",
- "PowerToys.MouseJumpUI.dll",
- "PowerToys.MouseJumpUI.exe",
+ "PowerToys.Launcher.dll",
+ "PowerToys.PowerLauncher.dll",
+ "PowerToys.PowerLauncher.exe",
+ "PowerToys.PowerLauncher.Telemetry.dll",
+ "Wox.dll",
+ "Wox.Infrastructure.dll",
+ "Wox.Plugin.dll",
+ "RunPlugins\\Calculator\\Microsoft.PowerToys.Run.Plugin.Calculator.dll",
+ "RunPlugins\\Folder\\Microsoft.Plugin.Folder.dll",
+ "RunPlugins\\Indexer\\Microsoft.Plugin.Indexer.dll",
+ "RunPlugins\\OneNote\\Microsoft.PowerToys.Run.Plugin.OneNote.dll",
+ "RunPlugins\\History\\Microsoft.PowerToys.Run.Plugin.History.dll",
+ "RunPlugins\\PowerToys\\Microsoft.PowerToys.Run.Plugin.PowerToys.dll",
+ "RunPlugins\\Program\\Microsoft.Plugin.Program.dll",
+ "RunPlugins\\Registry\\Microsoft.PowerToys.Run.Plugin.Registry.dll",
+ "RunPlugins\\WindowsSettings\\Microsoft.PowerToys.Run.Plugin.WindowsSettings.dll",
+ "RunPlugins\\Shell\\Microsoft.Plugin.Shell.dll",
+ "RunPlugins\\Uri\\Microsoft.Plugin.Uri.dll",
+ "RunPlugins\\WindowWalker\\Microsoft.Plugin.WindowWalker.dll",
+ "RunPlugins\\UnitConverter\\Community.PowerToys.Run.Plugin.UnitConverter.dll",
+ "RunPlugins\\VSCodeWorkspaces\\Community.PowerToys.Run.Plugin.VSCodeWorkspaces.dll",
+ "RunPlugins\\Service\\Microsoft.PowerToys.Run.Plugin.Service.dll",
+ "RunPlugins\\System\\Microsoft.PowerToys.Run.Plugin.System.dll",
+ "RunPlugins\\TimeDate\\Microsoft.PowerToys.Run.Plugin.TimeDate.dll",
+ "RunPlugins\\ValueGenerator\\Community.PowerToys.Run.Plugin.ValueGenerator.dll",
+ "RunPlugins\\WebSearch\\Community.PowerToys.Run.Plugin.WebSearch.dll",
+ "RunPlugins\\WindowsTerminal\\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.dll",
- "PowerToys.MouseWithoutBorders.dll",
- "PowerToys.MouseWithoutBorders.exe",
- "PowerToys.MouseWithoutBordersModuleInterface.dll",
- "PowerToys.MouseWithoutBordersService.dll",
- "PowerToys.MouseWithoutBordersService.exe",
- "PowerToys.MouseWithoutBordersHelper.dll",
- "PowerToys.MouseWithoutBordersHelper.exe",
+ "WinUI3Apps\\PowerToys.MeasureToolModuleInterface.dll",
+ "WinUI3Apps\\PowerToys.MeasureToolCore.dll",
+ "WinUI3Apps\\PowerToys.MeasureToolUI.dll",
+ "WinUI3Apps\\PowerToys.MeasureToolUI.exe",
- "WinUI3Apps\\PowerToys.NewPlus.ShellExtension.dll",
- "WinUI3Apps\\NewPlusPackage.msix",
- "WinUI3Apps\\PowerToys.NewPlus.ShellExtension.win10.dll",
+ "PowerToys.FindMyMouse.dll",
+ "PowerToys.MouseHighlighter.dll",
+ "PowerToys.MouseJump.dll",
+ "PowerToys.MouseJump.Common.dll",
+ "PowerToys.MousePointerCrosshairs.dll",
+ "PowerToys.MouseJumpUI.dll",
+ "PowerToys.MouseJumpUI.exe",
- "PowerAccent.Core.dll",
- "PowerToys.PowerAccent.dll",
- "PowerToys.PowerAccent.exe",
- "PowerToys.PowerAccentModuleInterface.dll",
- "PowerToys.PowerAccentKeyboardService.dll",
+ "PowerToys.MouseWithoutBorders.dll",
+ "PowerToys.MouseWithoutBorders.exe",
+ "PowerToys.MouseWithoutBordersModuleInterface.dll",
+ "PowerToys.MouseWithoutBordersService.dll",
+ "PowerToys.MouseWithoutBordersService.exe",
+ "PowerToys.MouseWithoutBordersHelper.dll",
+ "PowerToys.MouseWithoutBordersHelper.exe",
- "WinUI3Apps\\PowerToys.PowerRenameExt.dll",
- "WinUI3Apps\\PowerToys.PowerRename.exe",
- "WinUI3Apps\\PowerToys.PowerRenameContextMenu.dll",
- "WinUI3Apps\\PowerRenameContextMenuPackage.msix",
+ "WinUI3Apps\\PowerToys.NewPlus.ShellExtension.dll",
+ "WinUI3Apps\\NewPlusPackage.msix",
+ "WinUI3Apps\\PowerToys.NewPlus.ShellExtension.win10.dll",
- "PowerToys.WorkspacesSnapshotTool.exe",
- "PowerToys.WorkspacesLauncher.exe",
- "PowerToys.WorkspacesWindowArranger.exe",
- "PowerToys.WorkspacesEditor.exe",
- "PowerToys.WorkspacesEditor.dll",
- "PowerToys.WorkspacesLauncherUI.exe",
- "PowerToys.WorkspacesLauncherUI.dll",
- "PowerToys.WorkspacesModuleInterface.dll",
- "PowerToys.WorkspacesCsharpLibrary.dll",
+ "PowerAccent.Core.dll",
+ "PowerToys.PowerAccent.dll",
+ "PowerToys.PowerAccent.exe",
+ "PowerToys.PowerAccentModuleInterface.dll",
+ "PowerToys.PowerAccentKeyboardService.dll",
- "WinUI3Apps\\PowerToys.RegistryPreviewExt.dll",
- "WinUI3Apps\\PowerToys.RegistryPreviewUILib.dll",
- "WinUI3Apps\\PowerToys.RegistryPreview.dll",
- "WinUI3Apps\\PowerToys.RegistryPreview.exe",
+ "WinUI3Apps\\PowerToys.PowerRenameExt.dll",
+ "WinUI3Apps\\PowerToys.PowerRename.exe",
+ "WinUI3Apps\\PowerToys.PowerRenameContextMenu.dll",
+ "WinUI3Apps\\PowerRenameContextMenuPackage.msix",
- "PowerToys.ShortcutGuide.exe",
- "PowerToys.ShortcutGuideModuleInterface.dll",
+ "PowerToys.WorkspacesSnapshotTool.exe",
+ "PowerToys.WorkspacesLauncher.exe",
+ "PowerToys.WorkspacesWindowArranger.exe",
+ "PowerToys.WorkspacesEditor.exe",
+ "PowerToys.WorkspacesEditor.dll",
+ "PowerToys.WorkspacesLauncherUI.exe",
+ "PowerToys.WorkspacesLauncherUI.dll",
+ "PowerToys.WorkspacesModuleInterface.dll",
+ "PowerToys.WorkspacesCsharpLibrary.dll",
- "PowerToys.ZoomIt.exe",
- "PowerToys.ZoomItModuleInterface.dll",
- "PowerToys.ZoomItSettingsInterop.dll",
+ "WinUI3Apps\\PowerToys.RegistryPreviewExt.dll",
+ "WinUI3Apps\\PowerToys.RegistryPreviewUILib.dll",
+ "WinUI3Apps\\PowerToys.RegistryPreview.dll",
+ "WinUI3Apps\\PowerToys.RegistryPreview.exe",
- "WinUI3Apps\\PowerToys.Settings.dll",
- "WinUI3Apps\\PowerToys.Settings.exe",
+ "PowerToys.ShortcutGuide.exe",
+ "PowerToys.ShortcutGuideModuleInterface.dll",
- "PowerToys.CmdPalModuleInterface.dll",
- "CmdPalKeyboardService.dll",
- "*Microsoft.CmdPal.UI_*.msix"
- ],
+ "PowerToys.ZoomIt.exe",
+ "PowerToys.ZoomItModuleInterface.dll",
+ "PowerToys.ZoomItSettingsInterop.dll",
+
+ "WinUI3Apps\\PowerToys.Settings.dll",
+ "WinUI3Apps\\PowerToys.Settings.exe",
+
+ "PowerToys.CmdPalModuleInterface.dll",
+ "CmdPalKeyboardService.dll",
+ "*Microsoft.CmdPal.UI_*.msix"
+ ],
"SigningInfo": {
"Operations": [
{
diff --git a/.pipelines/ESRPSigning_installer.json b/.pipelines/ESRPSigning_installer.json
index 4f908aa89a..953644a546 100644
--- a/.pipelines/ESRPSigning_installer.json
+++ b/.pipelines/ESRPSigning_installer.json
@@ -5,6 +5,7 @@
{
"MatchedPath": [
"PowerToysSetupCustomActions.dll",
+ "PowerToysSetupCustomActionsVNext.dll",
"PowerToys*Setup-*.exe",
"PowerToys*Setup-*.msi",
"PowerToys*Setup-*.msi",
diff --git a/.pipelines/ESRPSigning_sdk.json b/.pipelines/ESRPSigning_sdk.json
index 066acf9e4e..e2e2db7701 100644
--- a/.pipelines/ESRPSigning_sdk.json
+++ b/.pipelines/ESRPSigning_sdk.json
@@ -4,9 +4,66 @@
"SignBatches": [
{
"MatchedPath": [
- "Microsoft.CommandPalette.Extensions.dll",
"Microsoft.CommandPalette.Extensions.Toolkit.dll"
],
+ "SigningInfo": {
+ "Operations": [
+ {
+ "KeyCode": "CP-233904-SN",
+ "OperationSetCode": "StrongNameSign",
+ "ToolName": "sign",
+ "ToolVersion": "1.0",
+ "Parameters": []
+ },
+ {
+ "KeyCode": "CP-233904-SN",
+ "OperationSetCode": "StrongNameVerify",
+ "ToolName": "sign",
+ "ToolVersion": "1.0",
+ "Parameters": []
+ },
+ {
+ "KeyCode": "CP-230012",
+ "OperationSetCode": "SigntoolSign",
+ "Parameters": [
+ {
+ "parameterName": "OpusName",
+ "parameterValue": "Microsoft"
+ },
+ {
+ "parameterName": "OpusInfo",
+ "parameterValue": "http://www.microsoft.com"
+ },
+ {
+ "parameterName": "FileDigest",
+ "parameterValue": "/fd \"SHA256\""
+ },
+ {
+ "parameterName": "PageHash",
+ "parameterValue": "/NPH"
+ },
+ {
+ "parameterName": "TimeStamp",
+ "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
+ }
+ ],
+ "ToolName": "sign",
+ "ToolVersion": "1.0"
+ },
+ {
+ "KeyCode": "CP-230012",
+ "OperationSetCode": "SigntoolVerify",
+ "Parameters": [],
+ "ToolName": "sign",
+ "ToolVersion": "1.0"
+ }
+ ]
+ }
+ },
+ {
+ "MatchedPath": [
+ "Microsoft.CommandPalette.Extensions.dll"
+ ],
"SigningInfo": {
"Operations": [
{
diff --git a/.pipelines/UpdateVersions.ps1 b/.pipelines/UpdateVersions.ps1
index a1bc5bef9a..0be3e3d30b 100644
--- a/.pipelines/UpdateVersions.ps1
+++ b/.pipelines/UpdateVersions.ps1
@@ -126,16 +126,15 @@ Get-ChildItem -Path $rootPath -Recurse packages.config | ForEach-Object {
}
# Update Directory.Packages.props file
-$propsFile = [System.IO.Path]::Combine($rootPath,"Directory.Packages.props")
-if (Test-Path $propsFile) {
- $file = Read-FileWithEncoding -Path $propsFile
+Get-ChildItem -Path $rootPath -Recurse "Directory.Packages.props" | ForEach-Object {
+ $file = Read-FileWithEncoding -Path $_.FullName
$content = $file.Content
if ($content -match ''
$oldVersionString = ''
$content = $content -replace $oldVersionString, $newVersionString
- Write-FileWithEncoding -Path $propsFile -Content $content -Encoding $file.encoding
- Write-Host "Modified " $propsFile
+ Write-FileWithEncoding -Path $_.FullName -Content $content -Encoding $file.encoding
+ Write-Host "Modified " $_.FullName
}
}
@@ -144,8 +143,8 @@ Get-ChildItem -Path $rootPath -Recurse *.vcxproj | ForEach-Object {
$file = Read-FileWithEncoding -Path $_.FullName
$content = $file.Content
if ($content -match '\\Microsoft.WindowsAppSDK.') {
- $newVersionString = '\Microsoft.WindowsAppSDK.' + $WinAppSDKVersion + '\'
- $oldVersionString = '\\Microsoft.WindowsAppSDK.[-.0-9a-zA-Z]*\\'
+ $newVersionString = '\Microsoft.WindowsAppSDK.' + $WinAppSDKVersion
+ $oldVersionString = '\\Microsoft.WindowsAppSDK.(?=[-.0-9a-zA-Z]*\d)[-.0-9a-zA-Z]*' #positive lookahead for at least a digit
$content = $content -replace $oldVersionString, $newVersionString
Write-FileWithEncoding -Path $_.FullName -Content $content -Encoding $file.encoding
Write-Host "Modified " $_.FullName
diff --git a/.pipelines/applyXamlStyling.ps1 b/.pipelines/applyXamlStyling.ps1
index 7cb7b4a4b0..1facedc569 100644
--- a/.pipelines/applyXamlStyling.ps1
+++ b/.pipelines/applyXamlStyling.ps1
@@ -41,6 +41,9 @@ Write-Output ""
Write-Output "Restoring dotnet tools..."
dotnet tool restore --disable-parallel --no-cache
+# Use Regex syntax
+$PathExcludes = "(\\obj\\)|(\\bin\\)|(\\x64\\)|(\\Generated Files\\PowerRenameXAML\\)|(\\RegistryPreviewUILib\\Controls\\HexBox\\)"
+
if (-not $Passive)
{
# Look for unstaged changed files by default
@@ -87,7 +90,7 @@ if (-not $Passive)
}
Write-Output "Running Git Diff: $gitDiffCommand"
- $files = Invoke-Expression $gitDiffCommand | Select-String -Pattern "\.xaml$"
+ $files = Invoke-Expression $gitDiffCommand | Select-String -Pattern "\.xaml$" | Where-Object { $_ -notmatch $PathExcludes }
if (-not $Passive -and -not $Main -and -not $Unstaged -and -not $Staged -and -not $LastCommit)
{
@@ -107,7 +110,7 @@ if (-not $Passive)
else
{
Write-Output "Checking all files (passively)"
- $files = Get-ChildItem -Path "$PSScriptRoot\..\src\*.xaml" -Recurse | Select-Object -ExpandProperty FullName | Where-Object { $_ -notmatch "(\\obj\\)|(\\bin\\)|(\\x64\\)|(\\Generated Files\\PowerRenameXAML\\)" }
+ $files = Get-ChildItem -Path "$PSScriptRoot\..\src\*.xaml" -Recurse | Select-Object -ExpandProperty FullName | Where-Object { $_ -notmatch $PathExcludes }
if ($files.count -gt 0)
{
diff --git a/.pipelines/loc/loc.yml b/.pipelines/loc/loc.yml
index 8d582c4830..cc4512c92e 100644
--- a/.pipelines/loc/loc.yml
+++ b/.pipelines/loc/loc.yml
@@ -25,7 +25,7 @@ steps:
fetchDepth: 1 # Don't need a deep checkout for loc files!
persistCredentials: true
-- task: MicrosoftTDBuild.tdbuild-task.tdbuild-task.TouchdownBuildTask@3
+- task: MicrosoftTDBuild.tdbuild-task.tdbuild-task.TouchdownBuildTask@5
displayName: 'Touchdown Build - 37400, PRODEXT'
inputs:
teamId: 37400
diff --git a/.pipelines/packages.config b/.pipelines/packages.config
index 43fa34c91c..c4bca409f9 100644
--- a/.pipelines/packages.config
+++ b/.pipelines/packages.config
@@ -1,4 +1,4 @@
-
+
diff --git a/.pipelines/v2/release.yml b/.pipelines/v2/release.yml
index bd825355dd..227dd1cf71 100644
--- a/.pipelines/v2/release.yml
+++ b/.pipelines/v2/release.yml
@@ -20,16 +20,6 @@ parameters:
type: string
default: '0.0.1'
- - name: cmdPalVersionNumber
- displayName: "Command Palette Version Number"
- type: string
- default: '0.0.1'
-
- - name: cmdPalSdkVersionNumber
- displayName: "Command Palette SDK Version Number"
- type: string
- default: '0.0.1'
-
- name: buildConfigurations
displayName: "Build Configurations"
type: object
@@ -50,6 +40,9 @@ parameters:
name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr)
+variables:
+ - template: templates/variables-nuget-package-version.yml
+
extends:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
@@ -88,8 +81,8 @@ extends:
buildPlatforms: ${{ parameters.buildPlatforms }}
buildConfigurations: ${{ parameters.buildConfigurations }}
versionNumber: ${{ parameters.versionNumber }}
- cmdPalVersionNumber: ${{ parameters.cmdPalVersionNumber }}
publishArtifacts: false # 1ES PT handles publication for us.
+ official: true
codeSign: true
runTests: false
signingIdentity:
@@ -106,7 +99,7 @@ extends:
beforeBuildSteps:
# Sets versions for all PowerToy created DLLs
- pwsh: |-
- .pipelines/versionSetting.ps1 -versionNumber '${{ parameters.versionNumber }}' -DevEnvironment '' -cmdPalVersionNumber '${{ parameters.cmdPalVersionNumber }}'
+ .pipelines/versionSetting.ps1 -versionNumber '${{ parameters.versionNumber }}' -DevEnvironment ''
displayName: Prepare versioning
# Prepare the localizations and telemetry config before the release build
@@ -130,8 +123,8 @@ extends:
name: SHINE-INT-L
image: SHINE-VS17-Latest
os: windows
+ official: true
codeSign: true
- sdkVersionNumber: ${{ parameters.cmdPalSdkVersionNumber }}
signingIdentity:
serviceName: $(SigningServiceName)
appId: $(SigningAppId)
diff --git a/.pipelines/v2/templates/job-build-project.yml b/.pipelines/v2/templates/job-build-project.yml
index 2e21a1c26c..51adb1a009 100644
--- a/.pipelines/v2/templates/job-build-project.yml
+++ b/.pipelines/v2/templates/job-build-project.yml
@@ -11,6 +11,9 @@ parameters:
default:
- x64
- arm64
+ - name: official
+ type: boolean
+ default: false
- name: codeSign
type: boolean
default: false
@@ -50,15 +53,15 @@ parameters:
- name: runTests
type: boolean
default: true
+ - name: buildTests
+ type: boolean
+ default: true
- name: useVSPreview
type: boolean
default: false
- name: versionNumber
type: string
default: '0.0.1'
- - name: cmdPalVersionNumber
- type: string
- default: '0.0.1'
- name: useLatestWinAppSDK
type: boolean
default: false
@@ -99,7 +102,7 @@ jobs:
${{ else }}:
OutputBuildPlatform: ${{ platform }}
variables:
- MakeAppxPath: 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86\MakeAppx.exe'
+ MakeAppxPath: 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\MakeAppx.exe'
# Azure DevOps abhors a vacuum
# If these are blank, expansion will fail later on... which will result in direct substitution of the variable *names*
# later on. We'll just... set them to a single space and if we need to, check IsNullOrWhiteSpace.
@@ -110,7 +113,7 @@ jobs:
JobOutputArtifactName: build-$(BuildPlatform)-$(BuildConfiguration)${{ parameters.artifactStem }}
NUGET_RESTORE_MSBUILD_ARGS: /p:Platform=$(BuildPlatform) # Required for nuget to work due to self contained
NODE_OPTIONS: --max_old_space_size=16384
- ${{ if eq(parameters.runTests, true) }}:
+ ${{ if or(eq(parameters.runTests, true), eq(parameters.buildTests, true)) }}:
MSBuildMainBuildTargets: Build;Test
${{ else }}:
MSBuildMainBuildTargets: Build
@@ -215,14 +218,15 @@ jobs:
env:
VCWhereExtraVersionTarget: '-prerelease'
+ - ${{ if eq(parameters.official, true) }}:
+ - template: .\steps-setup-versioning.yml
+ parameters:
+ directory: $(build.sourcesdirectory)\src\modules\cmdpal
+
- pwsh: |-
& "$(build.sourcesdirectory)\.pipelines\installWiX.ps1"
displayName: Download and install WiX 3.14 development build
- - pwsh: |-
- & "$(build.sourcesdirectory)\.pipelines\installWiXVNext.ps1"
- displayName: Download and install WiX 4/5 development build
-
- ${{ parameters.beforeBuildSteps }}
- task: VSBuild@1
@@ -331,6 +335,7 @@ jobs:
/p:VCRTForwarders-IncludeDebugCRT=false
/p:PowerToysRoot=$(Build.SourcesDirectory)
/p:PublishProfile=InstallationPublishProfile.pubxml
+ /p:TargetFramework=net9.0-windows10.0.26100.0
/bl:$(LogOutputDirectory)\publish-${{ join('_',split(project, '/')) }}.binlog
$(RestoreAdditionalProjectSourcesArg)
platform: $(BuildPlatform)
@@ -393,18 +398,16 @@ jobs:
testAssemblyVer2: |
**\KeyboardManagerEngineTest.dll
**\KeyboardManagerEditorTest.dll
- **\UnitTests-CommonLib.dll
- **\PowerRenameUnitTests.dll
- **\UnitTests-FancyZones.dll
+ **\*UnitTest*.dll
!**\obj\**
- - ${{ if eq(parameters.codeSign, true) }}:
- - pwsh: |-
- $Package = (Get-ChildItem -Recurse -Filter "Microsoft.CmdPal.UI_*.msix" | Select -First 1)
- $PackageFilename = $Package.FullName
- Write-Host "##vso[task.setvariable variable=CmdPalPackagePath]${PackageFilename}"
- displayName: Locate the MSIX
+ - pwsh: |-
+ $Package = (Get-ChildItem -Recurse -Filter "Microsoft.CmdPal.UI_*.msix" | Select -First 1)
+ $PackageFilename = $Package.FullName
+ Write-Host "##vso[task.setvariable variable=CmdPalPackagePath]${PackageFilename}"
+ displayName: Locate the CmdPal MSIX
+ - ${{ if eq(parameters.codeSign, true) }}:
- pwsh: |-
& "$(MakeAppxPath)" unpack /p "$(CmdPalPackagePath)" /d "$(JobOutputDirectory)/CmdPalPackageContents"
displayName: Unpack the MSIX for signing
@@ -424,6 +427,8 @@ jobs:
$PackageFilename = Join-Path $outDir.FullName (Split-Path -Leaf "$(CmdPalPackagePath)")
& "$(MakeAppxPath)" pack /h SHA256 /o /p $PackageFilename /d "$(JobOutputDirectory)/CmdPalPackageContents"
Copy-Item -Force $PackageFilename "$(CmdPalPackagePath)"
+ Remove-Item -Force -Recurse "$(JobOutputDirectory)/CmdPalPackageContents" -ErrorAction:Ignore
+ Remove-Item -Force -Recurse "$(JobOutputDirectory)/_appx" -ErrorAction:Ignore
displayName: Re-pack the new CmdPal package after signing
- template: steps-esrp-signing.yml
@@ -446,6 +451,10 @@ jobs:
batchSignPolicyFile: '$(build.sourcesdirectory)\.pipelines\ESRPSigning_DSC.json'
ciPolicyFile: '$(build.sourcesdirectory)\.pipelines\CIPolicy.xml'
+ - pwsh: |-
+ Copy-Item -Verbose -Force "$(CmdPalPackagePath)" "$(JobOutputDirectory)"
+ displayName: Stage the final CmdPal package
+
- template: steps-build-installer.yml
parameters:
codeSign: ${{ parameters.codeSign }}
@@ -567,7 +576,7 @@ jobs:
displayName: Stage GPO files
# Running the tests may result in future jobs consuming artifacts out of this build
- - ${{ if eq(parameters.runTests, true) }}:
+ - ${{ if or(eq(parameters.runTests, true), eq(parameters.buildTests, true)) }}:
- task: CopyFiles@2
displayName: Stage entire build output
inputs:
diff --git a/.pipelines/v2/templates/job-build-sdk.yml b/.pipelines/v2/templates/job-build-sdk.yml
index f8aa5dca3e..f8cb9c930a 100644
--- a/.pipelines/v2/templates/job-build-sdk.yml
+++ b/.pipelines/v2/templates/job-build-sdk.yml
@@ -3,6 +3,9 @@ parameters:
type: object
default:
- Release
+ - name: official
+ type: boolean
+ default: false
- name: codeSign
type: boolean
default: false
@@ -12,9 +15,6 @@ parameters:
- name: signingIdentity
type: object
default: {}
- - name: sdkVersionNumber
- type: string
- default: '0.0.1'
jobs:
- job: "BuildSDK"
@@ -36,8 +36,17 @@ jobs:
fetchTags: false
fetchDepth: 1
+ - template: .\steps-ensure-nuget-version.yml
+
+ - task: NuGetAuthenticate@1
+
+ - ${{ if eq(parameters.official, true) }}:
+ - template: .\steps-setup-versioning.yml
+ parameters:
+ directory: $(build.sourcesdirectory)\src\modules\cmdpal
+
- pwsh: |-
- & "$(build.sourcesdirectory)\src\modules\cmdpal\extensionsdk\nuget\BuildSDKHelper.ps1" -Configuration "Release" -VersionOfSDK ${{ parameters.sdkVersionNumber }} -BuildStep "build" -IsAzurePipelineBuild
+ & "$(build.sourcesdirectory)\src\modules\cmdpal\extensionsdk\nuget\BuildSDKHelper.ps1" -Configuration "Release" -BuildStep "build" -IsAzurePipelineBuild
displayName: Build SDK
- ${{ if eq(parameters.codeSign, true) }}:
@@ -52,7 +61,7 @@ jobs:
ciPolicyFile: '$(build.sourcesdirectory)\.pipelines\CIPolicy.xml'
- pwsh: |-
- & "$(build.sourcesdirectory)\src\modules\cmdpal\extensionsdk\nuget\BuildSDKHelper.ps1" -Configuration "Release" -VersionOfSDK ${{ parameters.sdkVersionNumber }} -BuildStep "pack" -IsAzurePipelineBuild
+ & "$(build.sourcesdirectory)\src\modules\cmdpal\extensionsdk\nuget\BuildSDKHelper.ps1" -Configuration "Release" -BuildStep "pack" -IsAzurePipelineBuild
displayName: Pack SDK
- task: CopyFiles@2
diff --git a/.pipelines/v2/templates/job-publish-symbols-using-symbolrequestprod-api.yml b/.pipelines/v2/templates/job-publish-symbols-using-symbolrequestprod-api.yml
index 967b7ba4eb..6b214be612 100644
--- a/.pipelines/v2/templates/job-publish-symbols-using-symbolrequestprod-api.yml
+++ b/.pipelines/v2/templates/job-publish-symbols-using-symbolrequestprod-api.yml
@@ -68,7 +68,7 @@ jobs:
pwsh: true
ScriptType: InlineScript
Inline: |-
- $AzToken = (Get-AzAccessToken -ResourceUrl api://30471ccf-0966-45b9-a979-065dbedb24c1).Token
+ $AzToken = (Get-AzAccessToken -AsSecureString -ResourceUrl api://30471ccf-0966-45b9-a979-065dbedb24c1).Token | ConvertFrom-SecureString -AsPlainText
Write-Host "##vso[task.setvariable variable=SymbolAccessToken;issecret=true]$AzToken"
diff --git a/.pipelines/v2/templates/job-test-project.yml b/.pipelines/v2/templates/job-test-project.yml
index 234f477fb6..ab682cd5a5 100644
--- a/.pipelines/v2/templates/job-test-project.yml
+++ b/.pipelines/v2/templates/job-test-project.yml
@@ -15,20 +15,29 @@ parameters:
jobs:
- job: Test${{ parameters.platform }}${{ parameters.configuration }}
displayName: Test ${{ parameters.platform }} ${{ parameters.configuration }}
+ timeoutInMinutes: 300
variables:
- BuildPlatform: ${{ parameters.platform }}
+ ${{ if or(eq(parameters.platform, 'x64Win10'), eq(parameters.platform, 'x64Win11')) }}:
+ BuildPlatform: x64
+ ${{ else }}:
+ BuildPlatform: ${{ parameters.platform }}
+ TestPlatform: ${{ parameters.platform }}
BuildConfiguration: ${{ parameters.configuration }}
SrcPath: $(Build.Repository.LocalPath)
- TestArtifactsName: build-${{ parameters.platform }}-${{ parameters.configuration }}${{ parameters.inputArtifactStem }}
+ TestArtifactsName: build-${{ variables.BuildPlatform }}-${{ parameters.configuration }}${{ parameters.inputArtifactStem }}
pool:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
${{ if ne(parameters.platform, 'ARM64') }}:
name: SHINE-INT-Testing-x64
+ ${{ if eq(parameters.platform, 'x64Win11') }}:
+ demands: ImageOverride -equals SHINE-W11-Testing
${{ else }}:
name: SHINE-INT-Testing-arm64
${{ else }}:
${{ if ne(parameters.platform, 'ARM64') }}:
name: SHINE-OSS-Testing-x64
+ ${{ if eq(parameters.platform, 'x64Win11') }}:
+ demands: ImageOverride -equals SHINE-W11-Testing
${{ else }}:
name: SHINE-OSS-Testing-arm64
steps:
@@ -101,8 +110,13 @@ jobs:
vsTestVersion: 'toolsInstaller'
uiTests: true
rerunFailedTests: true
+ # Since UITests-FancyZonesEditor.dll is generated in both UITests-FancyZonesEditor and UITests-FancyZones, removed one to avoid duplicate test runs
testAssemblyVer2: |
- **\UITests-FancyZones.dll
- **\UITests-FancyZonesEditor.dll
+ **\*UITest*.dll
!**\obj\**
- !**\ref\**
\ No newline at end of file
+ !**\ref\**
+ !**\UITests-FancyZones\**\UITests-FancyZonesEditor.dll
+
+
+ env:
+ platform: '$(TestPlatform)'
diff --git a/.pipelines/v2/templates/pipeline-ci-build.yml b/.pipelines/v2/templates/pipeline-ci-build.yml
index 37e06ae4f2..cc7a67e613 100644
--- a/.pipelines/v2/templates/pipeline-ci-build.yml
+++ b/.pipelines/v2/templates/pipeline-ci-build.yml
@@ -60,16 +60,4 @@ stages:
useLatestWinAppSDK: ${{ parameters.useLatestWinAppSDK }}
${{ if eq(parameters.useLatestWinAppSDK, true) }}:
winAppSDKVersionNumber: ${{ parameters.winAppSDKVersionNumber }}
- useExperimentalVersion: ${{ parameters.useExperimentalVersion }}
-
- - ${{ if and(eq(parameters.runTests, true), not(and(eq(platform, 'arm64'), eq(variables['System.PullRequest.IsFork'], true)))) }}:
- - stage: Test_${{ platform }}
- displayName: Test ${{ platform }}
- dependsOn:
- - Build_${{platform}}
- jobs:
- - template: job-test-project.yml
- parameters:
- platform: ${{ platform }}
- configuration: Release
- useLatestWebView2: ${{ parameters.useLatestWebView2 }}
+ useExperimentalVersion: ${{ parameters.useExperimentalVersion }}
\ No newline at end of file
diff --git a/.pipelines/v2/templates/pipeline-ui-tests-automation.yml b/.pipelines/v2/templates/pipeline-ui-tests-automation.yml
new file mode 100644
index 0000000000..4db1005f3b
--- /dev/null
+++ b/.pipelines/v2/templates/pipeline-ui-tests-automation.yml
@@ -0,0 +1,84 @@
+variables:
+ - name: runCodesignValidationInjectionBG
+ value: false
+ - name: EnablePipelineCache
+ value: true
+ - ${{ if eq(parameters.enableMsBuildCaching, true) }}:
+ - name: EnablePipelineCache
+ value: true
+
+parameters:
+ - name: buildPlatforms
+ type: object
+ default:
+ - x64
+ - arm64
+ - name: enableMsBuildCaching
+ type: boolean
+ default: false
+ - name: useVSPreview
+ type: boolean
+ default: false
+ - name: useLatestWebView2
+ type: boolean
+ default: false
+
+stages:
+ - ${{ each platform in parameters.buildPlatforms }}:
+ - stage: Build_${{ platform }}
+ displayName: Build ${{ platform }}
+ dependsOn: []
+ jobs:
+ - template: job-build-project.yml
+ parameters:
+ pool:
+ ${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
+ name: SHINE-INT-L
+ ${{ else }}:
+ name: SHINE-OSS-L
+ ${{ if eq(parameters.useVSPreview, true) }}:
+ demands: ImageOverride -equals SHINE-VS17-Preview
+ buildPlatforms:
+ - ${{ platform }}
+ buildConfigurations: [Release]
+ enablePackageCaching: true
+ enableMsBuildCaching: ${{ parameters.enableMsBuildCaching }}
+ runTests: false
+ buildTests: true
+ useVSPreview: ${{ parameters.useVSPreview }}
+
+ - ${{ if eq(platform, 'x64') }}:
+ - stage: Test_x64Win10
+ displayName: Test x64Win10
+ dependsOn:
+ - Build_${{platform}}
+ jobs:
+ - template: job-test-project.yml
+ parameters:
+ platform: x64Win10
+ configuration: Release
+ useLatestWebView2: ${{ parameters.useLatestWebView2 }}
+
+ - ${{ if eq(platform, 'x64') }}:
+ - stage: Test_x64Win11
+ displayName: Test x64Win11
+ dependsOn:
+ - Build_${{platform}}
+ jobs:
+ - template: job-test-project.yml
+ parameters:
+ platform: x64Win11
+ configuration: Release
+ useLatestWebView2: ${{ parameters.useLatestWebView2 }}
+
+ - ${{ if ne(platform, 'x64') }}:
+ - stage: Test_${{ platform }}
+ displayName: Test ${{ platform }}
+ dependsOn:
+ - Build_${{platform}}
+ jobs:
+ - template: job-test-project.yml
+ parameters:
+ platform: ${{ platform }}
+ configuration: Release
+ useLatestWebView2: ${{ parameters.useLatestWebView2 }}
diff --git a/.pipelines/v2/templates/steps-build-installer-vnext.yml b/.pipelines/v2/templates/steps-build-installer-vnext.yml
index ba286f2b9d..a877e783d3 100644
--- a/.pipelines/v2/templates/steps-build-installer-vnext.yml
+++ b/.pipelines/v2/templates/steps-build-installer-vnext.yml
@@ -36,12 +36,12 @@ steps:
# This dll needs to be built and signed before building the MSI.
- task: VSBuild@1
- displayName: ${{replace(replace(parameters.buildUserInstaller,'True','👤'),'False','💻')}} Build PowerToysSetupCustomActions
+ displayName: ${{replace(replace(parameters.buildUserInstaller,'True','👤'),'False','💻')}} Build PowerToysSetupCustomActionsVNext
inputs:
solution: "**/installer/PowerToysSetup.sln"
vsVersion: 17.0
msbuildArgs: >-
- /t:PowerToysSetupCustomActions
+ /t:PowerToysSetupCustomActionsVNext
/p:RunBuildEvents=true;PerUser=${{parameters.buildUserInstaller}};RestorePackagesConfig=true;CIBuild=true
-restore -graph
/bl:$(LogOutputDirectory)\installer-$(InstallerBuildSlug)-actions.binlog
@@ -55,10 +55,10 @@ steps:
- ${{ if eq(parameters.codeSign, true) }}:
- template: steps-esrp-signing.yml
parameters:
- displayName: ${{replace(replace(parameters.buildUserInstaller,'True','👤'),'False','💻')}} Sign PowerToysSetupCustomActions
+ displayName: ${{replace(replace(parameters.buildUserInstaller,'True','👤'),'False','💻')}} Sign PowerToysSetupCustomActionsVNext
signingIdentity: ${{ parameters.signingIdentity }}
inputs:
- FolderPath: 'installer/PowerToysSetupCustomActions/$(InstallerRelativePath)'
+ FolderPath: 'installer/PowerToysSetupCustomActionsVNext/$(InstallerRelativePath)'
signType: batchSigning
batchSignPolicyFile: '$(build.sourcesdirectory)\.pipelines\ESRPSigning_installer.json'
ciPolicyFile: '$(build.sourcesdirectory)\.pipelines\CIPolicy.xml'
@@ -118,6 +118,7 @@ steps:
solution: "**/installer/PowerToysSetup.sln"
vsVersion: 17.0
msbuildArgs: >-
+ -restore
/t:PowerToysBootstrapperVNext
/p:PerUser=${{parameters.buildUserInstaller}};CIBuild=true
/bl:$(LogOutputDirectory)\installer-$(InstallerBuildSlug)-bootstrapper.binlog
diff --git a/.pipelines/v2/templates/steps-fetch-and-prepare-localizations.yml b/.pipelines/v2/templates/steps-fetch-and-prepare-localizations.yml
index 30cf2b6f67..44f8c4b6dc 100644
--- a/.pipelines/v2/templates/steps-fetch-and-prepare-localizations.yml
+++ b/.pipelines/v2/templates/steps-fetch-and-prepare-localizations.yml
@@ -4,7 +4,7 @@ parameters:
default: false
steps:
- - task: TouchdownBuildTask@3
+ - task: TouchdownBuildTask@5
displayName: 'Download Localization Files -- PowerToys 37400'
inputs:
teamId: 37400
diff --git a/.pipelines/v2/templates/steps-setup-versioning.yml b/.pipelines/v2/templates/steps-setup-versioning.yml
new file mode 100644
index 0000000000..6dc0e3ef92
--- /dev/null
+++ b/.pipelines/v2/templates/steps-setup-versioning.yml
@@ -0,0 +1,11 @@
+parameters:
+ - name: directory
+ type: string
+ default: $(Build.SourcesDirectory)
+
+steps:
+ - pwsh: |-
+ nuget install Microsoft.Windows.Terminal.Versioning -ConfigFile "$(Build.SourcesDirectory)\.pipelines\release-nuget.config" -OutputDirectory _versioning
+ $VersionRoot = (Get-Item _versioning\Microsoft.Windows.*).FullName
+ & "$VersionRoot\build\Setup.ps1" -ProjectDirectory "${{ parameters.directory }}" -Verbose
+ displayName: Set up versioning for ${{ parameters.directory }} via M.W.T.V
diff --git a/.pipelines/v2/templates/variables-nuget-package-version.yml b/.pipelines/v2/templates/variables-nuget-package-version.yml
new file mode 100644
index 0000000000..460b7ceee0
--- /dev/null
+++ b/.pipelines/v2/templates/variables-nuget-package-version.yml
@@ -0,0 +1,17 @@
+variables:
+ # If we are building a branch called "stable*", hide the NuGet suffix.
+ # If we don't do that, XES will set the suffix to "stable".
+ # main is special, however. XES ignores main. Since we never produce actual
+ # shipping builds from main, we want to force it to have a beta label.
+ #
+ # In effect:
+ # BRANCH / BRANDING | Version |
+ # ------------------|----------------------------|
+ # stable | 0.2.250512001 |
+ # main | 0.2.250512001-experimental |
+ # all others | 0.2.250512001-branch |
+ ${{ if startsWith(variables['Build.SourceBranchName'], 'stable') }}:
+ NoNuGetPackBetaVersion: true
+ ${{ elseif eq(variables['Build.SourceBranchName'], 'main') }}:
+ NuGetPackBetaVersion: experimental
+
diff --git a/.pipelines/verifyAndSetLatestVCToolsVersion.ps1 b/.pipelines/verifyAndSetLatestVCToolsVersion.ps1
index a47e6a2292..4ebf3a3eec 100644
--- a/.pipelines/verifyAndSetLatestVCToolsVersion.ps1
+++ b/.pipelines/verifyAndSetLatestVCToolsVersion.ps1
@@ -1,7 +1,28 @@
$VSInstances = ([xml](& 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -include packages -format xml))
$VSPackages = $VSInstances.instances.instance.packages.package
-$LatestVCPackage = ($VSInstances.instances.instance.packages.package | ? { $_.id -eq "Microsoft.VisualCpp.Tools.Core" })
+$LatestVCPackage = ($VSPackages | ? { $_.id -eq "Microsoft.VisualCpp.Tools.Core" })
$LatestVCToolsVersion = $LatestVCPackage.version;
+
+$VSRoot = (& 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property 'resolvedInstallationPath')
+$VCToolsRoot = Join-Path $VSRoot "VC\Tools\MSVC"
+
+# We have observed a few instances where the VC tools package version actually
+# differs from the version on the files themselves. We might as well check
+# whether the version we just found _actually exists_ before we use it.
+# We'll use whichever highest version exists.
+$PackageVCToolPath = Join-Path $VCToolsRoot $LatestVCToolsVersion
+If ($Null -Eq (Get-Item $PackageVCToolPath -ErrorAction:Ignore)) {
+ $VCToolsVersions = Get-ChildItem $VCToolsRoot | ForEach-Object {
+ [Version]$_.Name
+ } | Sort -Descending
+ $LatestActualVCToolsVersion = $VCToolsVersions | Select -First 1
+
+ If ([Version]$LatestVCToolsVersion -Ne $LatestActualVCToolsVersion) {
+ Write-Output "VC Tools Mismatch: Directory = $LatestActualVCToolsVersion, Package = $LatestVCToolsVersion"
+ $LatestVCToolsVersion = $LatestActualVCToolsVersion.ToString(3)
+ }
+}
+
Write-Output "Latest VCToolsVersion: $LatestVCToolsVersion"
Write-Output "Updating VCToolsVersion environment variable for job"
Write-Output "##vso[task.setvariable variable=VCToolsVersion]$LatestVCToolsVersion"
diff --git a/.pipelines/verifyDepsJsonLibraryVersions.ps1 b/.pipelines/verifyDepsJsonLibraryVersions.ps1
index e85ca1d991..085e1e439a 100644
--- a/.pipelines/verifyDepsJsonLibraryVersions.ps1
+++ b/.pipelines/verifyDepsJsonLibraryVersions.ps1
@@ -92,4 +92,3 @@ if ($totalFailures -gt 0) {
Write-Host -ForegroundColor Green "All " $referencedFileVersionsPerDll.keys.Count " libraries are mentioned with the same version across the dependencies.`r`n"
exit 0
-
diff --git a/.pipelines/verifyNoticeMdAgainstNugetPackages.ps1 b/.pipelines/verifyNoticeMdAgainstNugetPackages.ps1
index ebef8412a7..e3120836c8 100644
--- a/.pipelines/verifyNoticeMdAgainstNugetPackages.ps1
+++ b/.pipelines/verifyNoticeMdAgainstNugetPackages.ps1
@@ -72,9 +72,57 @@ $returnList = [System.Collections.Generic.HashSet[string]]($totalList) -join "`r
Write-Host $returnList
+# Extract the current package list from NOTICE.md
+$noticePattern = "## NuGet Packages used by PowerToys\s*((?:\r?\n- .+)+)"
+$noticeMatch = [regex]::Match($noticeFile, $noticePattern)
+
+if ($noticeMatch.Success) {
+ $currentNoticePackageList = $noticeMatch.Groups[1].Value.Trim()
+} else {
+ Write-Warning "Warning: Could not find 'NuGet Packages used by PowerToys' section in NOTICE.md"
+ $currentNoticePackageList = ""
+}
+
if (!$noticeFile.Trim().EndsWith($returnList.Trim()))
{
Write-Host -ForegroundColor Red "Notice.md does not match NuGet list."
+
+ # Show detailed differences
+ $generatedPackages = $returnList -split "`r`n|`n" | Where-Object { $_.Trim() -ne "" } | Sort-Object
+ $noticePackages = $currentNoticePackageList -split "`r`n|`n" | Where-Object { $_.Trim() -ne "" } | ForEach-Object { $_.Trim() } | Sort-Object
+
+ Write-Host ""
+ Write-Host -ForegroundColor Cyan "=== DETAILED DIFFERENCE ANALYSIS ==="
+ Write-Host ""
+
+ # Find packages in proj file list but not in NOTICE.md
+ $missingFromNotice = $generatedPackages | Where-Object { $noticePackages -notcontains $_ }
+ if ($missingFromNotice.Count -gt 0) {
+ Write-Host -ForegroundColor Red "MissingFromNotice:"
+ foreach ($pkg in $missingFromNotice) {
+ Write-Host -ForegroundColor Red " $pkg"
+ }
+ Write-Host ""
+ }
+
+ # Find packages in NOTICE.md but not in proj file list
+ $extraInNotice = $noticePackages | Where-Object { $generatedPackages -notcontains $_ }
+ if ($extraInNotice.Count -gt 0) {
+ Write-Host -ForegroundColor Yellow "ExtraInNotice:"
+ foreach ($pkg in $extraInNotice) {
+ Write-Host -ForegroundColor Yellow " $pkg"
+ }
+ Write-Host ""
+ }
+
+ # Show counts for summary
+ Write-Host -ForegroundColor Cyan "Summary:"
+ Write-Host " Proj file list has $($generatedPackages.Count) packages"
+ Write-Host " NOTICE.md has $($noticePackages.Count) packages"
+ Write-Host " MissingFromNotice: $($missingFromNotice.Count) packages"
+ Write-Host " ExtraInNotice: $($extraInNotice.Count) packages"
+ Write-Host ""
+
exit 1
}
diff --git a/.pipelines/versionAndSignCheck.ps1 b/.pipelines/versionAndSignCheck.ps1
index 89cfbeea1c..1bb271300d 100644
--- a/.pipelines/versionAndSignCheck.ps1
+++ b/.pipelines/versionAndSignCheck.ps1
@@ -9,6 +9,7 @@ Param(
$DirPath = $targetDir; #this file is in pipeline, we need root.
$items = Get-ChildItem -Path $DirPath -File -Include *.exe, *.dll, *.ttf, PTCustomActions -Recurse -Force -ErrorAction SilentlyContinue
$versionExceptions = @(
+ "AdaptiveCards.Templating.dll",
"Microsoft.Windows.ApplicationModel.DynamicDependency.Projection.dll",
"Microsoft.Windows.ApplicationModel.Resources.Projection.dll",
"Microsoft.Windows.ApplicationModel.WindowsAppRuntime.Projection.dll",
@@ -28,6 +29,8 @@ $versionExceptions = @(
"ObjectModelCsProjection.dll",
"RendererCsProjection.dll") -join '|';
$nullVersionExceptions = @(
+ "SkiaSharp.Views.WinUI.Native.dll",
+ "libSkiaSharp.dll",
"codicon.ttf",
"e_sqlite3.dll",
"getfilesiginforedist.dll",
diff --git a/.pipelines/versionSetting.ps1 b/.pipelines/versionSetting.ps1
index bda3c47cc2..cf2d2595af 100644
--- a/.pipelines/versionSetting.ps1
+++ b/.pipelines/versionSetting.ps1
@@ -5,10 +5,7 @@ Param(
[Parameter(Mandatory=$True,Position=2)]
[AllowEmptyString()]
- [string]$DevEnvironment = "Local",
-
- [Parameter(Mandatory=$True,Position=3)]
- [string]$cmdPalVersionNumber = "0.0.1"
+ [string]$DevEnvironment = "Local"
)
Write-Host $PSScriptRoot
@@ -49,7 +46,6 @@ $verProps.Save($verPropWriteFileLocation);
$verPropWriteFileLocation = $PSScriptRoot + '/../src/CmdPalVersion.props';
$verPropReadFileLocation = $verPropWriteFileLocation;
[XML]$verProps = Get-Content $verPropReadFileLocation
-$verProps.Project.PropertyGroup.CmdPalVersion = $cmdPalVersionNumber;
$verProps.Project.PropertyGroup.DevEnvironment = $DevEnvironment;
Write-Host "xml" $verProps.Project.PropertyGroup.Version
$verProps.Save($verPropWriteFileLocation);
@@ -90,12 +86,3 @@ $newPlusContextMenuAppManifestReadFileLocation = $newPlusContextMenuAppManifestW
$newPlusContextMenuAppManifest.Package.Identity.Version = $versionNumber + '.0'
Write-Host "NewPlusContextMenu version" $newPlusContextMenuAppManifest.Package.Identity.Version
$newPlusContextMenuAppManifest.Save($newPlusContextMenuAppManifestWriteFileLocation);
-
-# Set package version in Package.appxmanifest
-$cmdPalAppManifestWriteFileLocation = $PSScriptRoot + '/../src/modules/cmdpal/Microsoft.CmdPal.UI/Package.appxmanifest';
-$cmdPalAppManifestReadFileLocation = $cmdPalAppManifestWriteFileLocation;
-
-[XML]$cmdPalAppManifest = Get-Content $cmdPalAppManifestReadFileLocation
-$cmdPalAppManifest.Package.Identity.Version = $cmdPalVersionNumber + '.0'
-Write-Host "CmdPal Package version: " $cmdPalAppManifest.Package.Identity.Version
-$cmdPalAppManifest.Save($cmdPalAppManifestWriteFileLocation);
diff --git a/.vsconfig b/.vsconfig
index 77ec8b0ffd..90abacd81c 100644
--- a/.vsconfig
+++ b/.vsconfig
@@ -9,6 +9,7 @@
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
"Microsoft.VisualStudio.Component.Windows10SDK.20348",
"Microsoft.VisualStudio.Component.Windows10SDK.22621",
+ "Microsoft.VisualStudio.Component.Windows10SDK.26100",
"Microsoft.VisualStudio.ComponentGroup.UWP.VC",
"Microsoft.VisualStudio.Component.UWP.VC.ARM64",
"Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre",
diff --git a/COMMUNITY.md b/COMMUNITY.md
index ccfa61decf..5f9a0a57ea 100644
--- a/COMMUNITY.md
+++ b/COMMUNITY.md
@@ -6,8 +6,8 @@ Names are in alphabetical order based on first name.
## High impact community members
-### [@Aaron-Junker](https://github.com/Aaron-Junker) - [Aaron Junker](https://aaron-junker.github.io)
-Aaron has helped triaging, discussing, and creating a substantial number of issues and contributed features/fixes. Aaron was the primary person for helping build the File Explorer preview pane handler for developer files.
+### [@Noraa-Junker](https://github.com/Noraa-Junker) - [Noraa Junker](https://noraajunker.ch)
+Noraa has helped triaging, discussing, and creating a substantial number of issues and contributed features/fixes. Noraa was the primary person for helping build the File Explorer preview pane handler for developer files.
### [@cgaarden](https://github.com/cgaarden) - [Christian Gaarden Gaardmark](https://www.onegreatworld.com)
Christian contributed New+ utility
@@ -21,7 +21,7 @@ Connor was the creator of Workspaces and helped create Command Palette (PowerToy
### [@damienleroy](https://github.com/damienleroy) - [Damien Leroy](https://www.linkedin.com/in/Damien-Leroy-b2734416a/)
Damien has helped out by developing and contributing the Quick Accent utility.
-### [@daverayment ](https://github.com/daverayment) - [David Rayment](https://www.linkedin.com/in/david-rayment-168b5251/)
+### [@daverayment](https://github.com/daverayment) - [David Rayment](https://www.linkedin.com/in/david-rayment-168b5251/)
Dave has helped improve the experience inside of Peek by adding in new features and fixing bugs.
### [@davidegiacometti](https://github.com/davidegiacometti) - [Davide Giacometti](https://www.linkedin.com/in/davidegiacometti/)
@@ -117,10 +117,6 @@ PowerRename is from Chris's SmartRename and icon rendering for SVGs in File Expl
PowerToys Awake is a tool to keep your computer awake.
-### [@Niels9001](https://github.com/niels9001/) - [Niels Laute](https://nielslaute.com/)
-
-Niels has helped drive large sums of our update toward a new [consistent and modern UX](https://github.com/microsoft/PowerToys/issues/891). This includes the [launcher work](https://github.com/microsoft/PowerToys/issues/44), color picker UX update and [icon design](https://github.com/microsoft/PowerToys/issues/1118).
-
### [@randyrants](https://github.com/randyrants) - [Randy Santossio](https://www.randyrants.com)
Randy contributed Registry Preview and some very early conversations about keyboard remapping.
@@ -184,11 +180,9 @@ ZoomIt source code was originally implemented by [Sysinternals](https://sysinter
## PowerToys core team
-- [@crutkas](https://github.com/crutkas/) - Clint Rutkas - Lead
- [@cinnamon-msft](https://github.com/cinnamon-msft) - Kayla Cinnamon - Lead
-- [@nguyen-dows](https://github.com/nguyen-dows) - Christopher Nguyen - Product Manager
- [@craigloewen-msft](https://github.com/craigloewen-msft) - Craig Loewen - Product Manager
-- [@zhiwei-ms](https://github.com/zhiwei-ms) - Zhiwei Yu - Product Manager
+- [@niels9001](https://github.com/niels9001/) - Niels Laute - Product Manager
- [@dhowett](https://github.com/dhowett) - Dustin Howett - Dev lead
- [@yeelam-gordon](https://github.com/yeelam-gordon) - Gordon Lam - Dev lead
- [@jamrobot](https://github.com/jamrobot) - Jerry Xu - Dev lead
@@ -204,6 +198,13 @@ ZoomIt source code was originally implemented by [Sysinternals](https://sysinter
- [@zhaopy536](https://github.com/zhaopy536) - Peiyao Zhao - Dev
- [@wang563681252](https://github.com/wang563681252) - Zhaopeng Wang - Dev
- [@vanzue](https://github.com/vanzue) - Kai Tao - Dev
+- [@zadjii-msft](https://github.com/zadjii-msft) - Mike Griese - Dev
+- [@khmyznikov](https://github.com/khmyznikov) - Gleb Khmyznikov - Dev
+- [@chatasweetie](https://github.com/chatasweetie) - Jessica Earley-Cha - Dev
+- [@MichaelJolley](https://github.com/MichaelJolley) - Michael Jolley - Dev
+- [@Jaylyn-Barbee](https://github.com/Jaylyn-Barbee) - Jaylyn Barbee - Dev
+- [@zateutsch](https://github.com/zateutsch) - Zach Teutsch - Dev
+- [@crutkas](https://github.com/crutkas/) - Clint Rutkas - Overhead
## Former PowerToys core team members
@@ -211,6 +212,7 @@ ZoomIt source code was originally implemented by [Sysinternals](https://sysinter
- [@ethanfangg](https://github.com/ethanfangg) - Ethan Fang - Product Manager
- [@plante-msft](https://github.com/plante-msft) - Connor Plante - Product Manager
- [@joadoumie](https://github.com/joadoumie) - Jordi Adoumie - Product Manager
+- [@nguyen-dows](https://github.com/nguyen-dows) - Christopher Nguyen - Product Manager
- [@enricogior](https://github.com/enricogior) - Enrico Giordani - Dev Lead
- [@bzoz](https://github.com/bzoz) - Bartosz Sosnowski - Dev
- [@ivan100sic](https://github.com/ivan100sic) - Ivan Stošić - Dev
diff --git a/Cpp.Build.props b/Cpp.Build.props
index 06c22b45bf..5a4538f940 100644
--- a/Cpp.Build.props
+++ b/Cpp.Build.props
@@ -96,8 +96,8 @@
- 10.0.22621.0
- 10.0.22621.0
+ 10.0.26100.0
+ 10.0.26100.0
10.0.19041.0
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 36b715c403..6a0bba7415 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -5,7 +5,8 @@
-
+
+
@@ -31,31 +32,31 @@
-
+
-
+
-
-
-
-
-
+
+
+
+
+
-
+
-
-
+
+
-
-
+
+
@@ -69,31 +70,33 @@
+
+
-
+
-
-
-
+
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
@@ -101,12 +104,13 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/NOTICE.md b/NOTICE.md
index d604be7d7f..bb03f9ade1 100644
--- a/NOTICE.md
+++ b/NOTICE.md
@@ -79,6 +79,43 @@ For more information, please refer to
### Calculator
+#### exprtk
+
+We use the exprtk library (exprtk.hpp) to evaluate mathematical expressions.
+
+**Source**: [https://github.com/ArashPartow/exprtk](https://github.com/ArashPartow/exprtk)
+
+```
+MIT License
+
+Copyright (c) 1999-2024 Arash Partow
+
+https://www.partow.net/programming/exprtk/index.html
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+```
+
+## Utility: PowerToys Run Built-in Extensions
+
+### Calculator
+
#### Mages
We use the Mages NuGet package for calculating the result of expression.
@@ -807,30 +844,25 @@ DEALINGS IN THE SOFTWARE.
**Source**: https://github.com/kuba--/zip
-This is free and unencumbered software released into the public domain.
+All Rights Reserved.
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
## Utility: Measure tool
@@ -1395,6 +1427,37 @@ EXHIBIT A -Mozilla Public License.
## Utility: Registry Preview
+### HexBox.WinUI
+
+We use HexBox.WinUI to show a preview of binary values.
+
+**Source**: https://github.com/hotkidfamily/HexBox.WinUI
+
+```
+MIT License
+
+Copyright (c) 2019 Filip Jeremic
+Copyright (c) 2024~2025 hotkidfamily@gmail.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+```
+
### Monaco Editor
**Source**: https://github.com/Microsoft/monaco-editor
@@ -1425,11 +1488,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
+
## NuGet Packages used by PowerToys
- AdaptiveCards.ObjectModel.WinUI3 2.0.0-beta
- AdaptiveCards.Rendering.WinUI3 2.1.0-beta
-- AdaptiveCards.Templating 2.0.2
+- AdaptiveCards.Templating 2.0.5
- Appium.WebDriver 4.4.5
- Azure.AI.OpenAI 1.0.0-beta.17
- CommunityToolkit.Common 8.4.0
@@ -1453,26 +1517,27 @@ SOFTWARE.
- Mages 3.0.0
- Markdig.Signed 0.34.0
- MessagePack 3.1.3
-- Microsoft.Bcl.AsyncInterfaces 9.0.4
+- Microsoft.Bcl.AsyncInterfaces 9.0.6
+- Microsoft.Bot.AdaptiveExpressions.Core 4.23.0
- Microsoft.CodeAnalysis.NetAnalyzers 9.0.0
-- Microsoft.Data.Sqlite 9.0.4
+- Microsoft.Data.Sqlite 9.0.6
- Microsoft.Diagnostics.Tracing.TraceEvent 3.1.16
- Microsoft.DotNet.ILCompiler (A)
-- Microsoft.Extensions.DependencyInjection 9.0.4
-- Microsoft.Extensions.Hosting 9.0.4
-- Microsoft.Extensions.Hosting.WindowsServices 9.0.4
-- Microsoft.Extensions.Logging 9.0.4
-- Microsoft.Extensions.Logging.Abstractions 9.0.4
+- Microsoft.Extensions.DependencyInjection 9.0.6
+- Microsoft.Extensions.Hosting 9.0.6
+- Microsoft.Extensions.Hosting.WindowsServices 9.0.6
+- Microsoft.Extensions.Logging 9.0.6
+- Microsoft.Extensions.Logging.Abstractions 9.0.6
- Microsoft.NET.ILLink.Tasks (A)
- Microsoft.SemanticKernel 1.15.0
- Microsoft.Toolkit.Uwp.Notifications 7.1.2
- Microsoft.Web.WebView2 1.0.2903.40
-- Microsoft.Win32.SystemEvents 9.0.4
-- Microsoft.Windows.Compatibility 9.0.4
-- Microsoft.Windows.CsWin32 0.2.46-beta
+- Microsoft.Win32.SystemEvents 9.0.6
+- Microsoft.Windows.Compatibility 9.0.6
+- Microsoft.Windows.CsWin32 0.3.183
- Microsoft.Windows.CsWinRT 2.2.0
-- Microsoft.Windows.SDK.BuildTools 10.0.22621.2428
-- Microsoft.WindowsAppSDK 1.7.250401001
+- Microsoft.Windows.SDK.BuildTools 10.0.26100.4188
+- Microsoft.WindowsAppSDK 1.7.250513003
- Microsoft.WindowsPackageManager.ComInterop 1.10.340
- Microsoft.Xaml.Behaviors.WinUI.Managed 2.0.9
- Microsoft.Xaml.Behaviors.Wpf 1.1.39
@@ -1485,27 +1550,28 @@ SOFTWARE.
- ReverseMarkdown 4.1.0
- ScipBe.Common.Office.OneNote 3.0.1
- SharpCompress 0.37.2
+- SkiaSharp.Views.WinUI 2.88.9
- StreamJsonRpc 2.21.69
- StyleCop.Analyzers 1.2.0-beta.556
-- System.CodeDom 9.0.4
+- System.CodeDom 9.0.6
- System.CommandLine 2.0.0-beta4.22272.1
-- System.ComponentModel.Composition 9.0.4
-- System.Configuration.ConfigurationManager 9.0.4
-- System.Data.OleDb 9.0.4
-- System.Data.SqlClient 4.8.6
-- System.Diagnostics.EventLog 9.0.4
-- System.Diagnostics.PerformanceCounter 9.0.4
-- System.Drawing.Common 9.0.4
+- System.ComponentModel.Composition 9.0.6
+- System.Configuration.ConfigurationManager 9.0.6
+- System.Data.OleDb 9.0.6
+- System.Data.SqlClient 4.9.0
+- System.Diagnostics.EventLog 9.0.6
+- System.Diagnostics.PerformanceCounter 9.0.6
+- System.Drawing.Common 9.0.6
- System.IO.Abstractions 22.0.13
- System.IO.Abstractions.TestingHelpers 22.0.13
-- System.Management 9.0.4
+- System.Management 9.0.6
- System.Net.Http 4.3.4
- System.Private.Uri 4.3.2
- System.Reactive 6.0.1
-- System.Runtime.Caching 9.0.4
-- System.ServiceProcess.ServiceController 9.0.4
-- System.Text.Encoding.CodePages 9.0.4
-- System.Text.Json 9.0.4
+- System.Runtime.Caching 9.0.6
+- System.ServiceProcess.ServiceController 9.0.6
+- System.Text.Encoding.CodePages 9.0.6
+- System.Text.Json 9.0.6
- System.Text.RegularExpressions 4.3.1
- UnicodeInformation 2.6.0
- UnitsNet 5.56.0
diff --git a/PowerToys.sln b/PowerToys.sln
index 201c0fbefe..f81a222668 100644
--- a/PowerToys.sln
+++ b/PowerToys.sln
@@ -604,6 +604,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WindowProperties", "WindowP
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WorkspacesLib", "src\modules\Workspaces\WorkspacesLib\WorkspacesLib.vcxproj", "{B31FCC55-B5A4-4EA7-B414-2DCEAE6AF332}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WorkspacesLibUnitTests", "src\modules\Workspaces\WorkspacesLib.UnitTests\WorkspacesLibUnitTests.vcxproj", "{A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {B31FCC55-B5A4-4EA7-B414-2DCEAE6AF332} = {B31FCC55-B5A4-4EA7-B414-2DCEAE6AF332}
+ EndProjectSection
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkspacesLauncherUI", "src\modules\Workspaces\WorkspacesLauncherUI\WorkspacesLauncherUI.csproj", "{9C53CC25-0623-4569-95BC-B05410675EE3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WorkspacesModuleInterface", "src\modules\Workspaces\WorkspacesModuleInterface\WorkspacesModuleInterface.vcxproj", "{45285DF2-9742-4ECA-9AC9-58951FC26489}"
@@ -706,10 +711,20 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegistryPreview.FuzzTests",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.System", "src\modules\cmdpal\ext\Microsoft.CmdPal.Ext.System\Microsoft.CmdPal.Ext.System.csproj", "{64B88F02-CD88-4ED8-9624-989A800230F9}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FancyZones.FuzzTests", "src\modules\fancyzones\FancyZones.FuzzTests\FancyZones.FuzzTests.csproj", "{0217E86E-3476-9946-DE8E-9D200CEBD47A}"
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CmdPalKeyboardService", "src\modules\cmdpal\CmdPalKeyboardService\CmdPalKeyboardService.vcxproj", "{5F63C743-F6CE-4DBA-A200-2B3F8A14E8C2}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PowerRename.FuzzingTest", "src\modules\powerrename\PowerRename.FuzzingTest\PowerRename.FuzzingTest.vcxproj", "{2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MouseUtils.UITests", "src\modules\MouseUtils\MouseUtils.UITests\MouseUtils.UITests.csproj", "{4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkspacesEditorUITest", "src\modules\Workspaces\WorkspacesEditorUITest\WorkspacesEditorUITest.csproj", "{43E779F3-D83C-48B1-BA8D-1912DBD76FC9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalculatorEngineCommon", "src\common\CalculatorEngineCommon\CalculatorEngineCommon.vcxproj", "{2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedCsWin32", "src\common\ManagedCsWin32\ManagedCsWin32.csproj", "{14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
@@ -2198,6 +2213,14 @@ Global
{B31FCC55-B5A4-4EA7-B414-2DCEAE6AF332}.Release|ARM64.Build.0 = Release|ARM64
{B31FCC55-B5A4-4EA7-B414-2DCEAE6AF332}.Release|x64.ActiveCfg = Release|x64
{B31FCC55-B5A4-4EA7-B414-2DCEAE6AF332}.Release|x64.Build.0 = Release|x64
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}.Debug|x64.ActiveCfg = Debug|x64
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}.Debug|x64.Build.0 = Debug|x64
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}.Release|ARM64.Build.0 = Release|ARM64
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}.Release|x64.ActiveCfg = Release|x64
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C}.Release|x64.Build.0 = Release|x64
{9C53CC25-0623-4569-95BC-B05410675EE3}.Debug|ARM64.ActiveCfg = Debug|ARM64
{9C53CC25-0623-4569-95BC-B05410675EE3}.Debug|ARM64.Build.0 = Debug|ARM64
{9C53CC25-0623-4569-95BC-B05410675EE3}.Debug|x64.ActiveCfg = Debug|x64
@@ -2582,6 +2605,30 @@ Global
{64B88F02-CD88-4ED8-9624-989A800230F9}.Release|ARM64.Build.0 = Release|ARM64
{64B88F02-CD88-4ED8-9624-989A800230F9}.Release|x64.ActiveCfg = Release|x64
{64B88F02-CD88-4ED8-9624-989A800230F9}.Release|x64.Build.0 = Release|x64
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Debug|ARM64.Build.0 = Debug|ARM64
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Debug|x64.ActiveCfg = Debug|x64
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Debug|x64.Build.0 = Debug|x64
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Release|ARM64.ActiveCfg = Release|ARM64
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Release|ARM64.Build.0 = Release|ARM64
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Release|x64.ActiveCfg = Release|x64
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Release|x64.Build.0 = Release|x64
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9}.Debug|ARM64.Build.0 = Debug|ARM64
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9}.Debug|x64.ActiveCfg = Debug|x64
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9}.Debug|x64.Build.0 = Debug|x64
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9}.Release|ARM64.ActiveCfg = Release|ARM64
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9}.Release|ARM64.Build.0 = Release|ARM64
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9}.Release|x64.ActiveCfg = Release|x64
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9}.Release|x64.Build.0 = Release|x64
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A}.Debug|ARM64.Build.0 = Debug|ARM64
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A}.Debug|x64.ActiveCfg = Debug|x64
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A}.Debug|x64.Build.0 = Debug|x64
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A}.Release|ARM64.ActiveCfg = Release|ARM64
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A}.Release|ARM64.Build.0 = Release|ARM64
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A}.Release|x64.ActiveCfg = Release|x64
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A}.Release|x64.Build.0 = Release|x64
{5F63C743-F6CE-4DBA-A200-2B3F8A14E8C2}.Debug|ARM64.ActiveCfg = Debug|ARM64
{5F63C743-F6CE-4DBA-A200-2B3F8A14E8C2}.Debug|ARM64.Build.0 = Debug|ARM64
{5F63C743-F6CE-4DBA-A200-2B3F8A14E8C2}.Debug|x64.ActiveCfg = Debug|x64
@@ -2596,6 +2643,22 @@ Global
{2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E}.Release|ARM64.ActiveCfg = Release|ARM64
{2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E}.Release|x64.ActiveCfg = Release|x64
{2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E}.Release|x64.Build.0 = Release|x64
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}.Debug|ARM64.Build.0 = Debug|ARM64
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}.Debug|x64.ActiveCfg = Debug|x64
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}.Debug|x64.Build.0 = Debug|x64
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}.Release|ARM64.ActiveCfg = Release|ARM64
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}.Release|ARM64.Build.0 = Release|ARM64
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}.Release|x64.ActiveCfg = Release|x64
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6}.Release|x64.Build.0 = Release|x64
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Debug|ARM64.Build.0 = Debug|ARM64
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Debug|x64.ActiveCfg = Debug|x64
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Debug|x64.Build.0 = Debug|x64
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Release|ARM64.ActiveCfg = Release|ARM64
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Release|ARM64.Build.0 = Release|ARM64
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Release|x64.ActiveCfg = Release|x64
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -2735,7 +2798,7 @@ Global
{25C91A4E-BA4E-467A-85CD-8B62545BF674} = {A50C70A6-2DA0-4027-B90E-B1A40755A8A5}
{6AB6A2D6-F859-4A82-9184-0BD29C9F07D1} = {A50C70A6-2DA0-4027-B90E-B1A40755A8A5}
{212AD910-8488-4036-BE20-326931B75FB2} = {4AFC9975-2456-4C70-94A4-84073C1CED93}
- {7AC943C9-52E8-44CF-9083-744D8049667B} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC}
+ {7AC943C9-52E8-44CF-9083-744D8049667B} = {322566EF-20DC-43A6-B9F8-616AF942579A}
{54A93AF7-60C7-4F6C-99D2-FBB1F75F853A} = {7AC943C9-52E8-44CF-9083-744D8049667B}
{92C39820-9F84-4529-BC7D-22AAE514D63B} = {7AC943C9-52E8-44CF-9083-744D8049667B}
{515554D1-D004-4F7F-A107-2211FC0F6B2C} = {7AC943C9-52E8-44CF-9083-744D8049667B}
@@ -2815,6 +2878,7 @@ Global
{BE126CBB-AE12-406A-9837-A05ACFCA57A7} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
{14CB58B7-D280-4A7A-95DE-4B2DF14EA000} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
{B31FCC55-B5A4-4EA7-B414-2DCEAE6AF332} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
+ {A85D4D9F-9A39-4B5D-8B5A-9F2D5C9A8B4C} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
{9C53CC25-0623-4569-95BC-B05410675EE3} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
{45285DF2-9742-4ECA-9AC9-58951FC26489} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
{3D63307B-9D27-44FD-B033-B26F39245B85} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
@@ -2866,8 +2930,13 @@ Global
{4E0AE3A4-2EE0-44D7-A2D0-8769977254A0} = {F05E590D-AD46-42BE-9C25-6A63ADD2E3EA}
{5702B3CC-8575-48D5-83D8-15BB42269CD3} = {929C1324-22E8-4412-A9A8-80E85F3985A5}
{64B88F02-CD88-4ED8-9624-989A800230F9} = {ECB8E0D1-7603-4E5C-AB10-D1E545E6F8E2}
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1} = {322566EF-20DC-43A6-B9F8-616AF942579A}
+ {43E779F3-D83C-48B1-BA8D-1912DBD76FC9} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
+ {0217E86E-3476-9946-DE8E-9D200CEBD47A} = {D1D6BC88-09AE-4FB4-AD24-5DED46A791DD}
{5F63C743-F6CE-4DBA-A200-2B3F8A14E8C2} = {3846508C-77EB-4034-A702-F8BB263C4F79}
{2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E} = {89E20BCE-EB9C-46C8-8B50-E01A82E6FDC3}
+ {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6} = {1AFB6476-670D-4E80-A464-657E01DFF482}
+ {14AFD976-B4D2-49D0-9E6C-AA93CC061B8A} = {1AFB6476-670D-4E80-A464-657E01DFF482}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0}
diff --git a/README.md b/README.md
index 1a0d80dc00..232cf6fd82 100644
--- a/README.md
+++ b/README.md
@@ -35,28 +35,28 @@ Microsoft PowerToys is a set of utilities for power users to tune and streamline
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.
-[github-next-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.91%22
-[github-current-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.90%22
-[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.90.0/PowerToysUserSetup-0.90.0-x64.exe
-[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.90.0/PowerToysUserSetup-0.90.0-arm64.exe
-[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.90.0/PowerToysSetup-0.90.0-x64.exe
-[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.90.0/PowerToysSetup-0.90.0-arm64.exe
+[github-next-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.92%22
+[github-current-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.91%22
+[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.91.1/PowerToysUserSetup-0.91.1-x64.exe
+[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.91.1/PowerToysUserSetup-0.91.1-arm64.exe
+[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.91.1/PowerToysSetup-0.91.1-x64.exe
+[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.91.1/PowerToysSetup-0.91.1-arm64.exe
| Description | Filename | sha256 hash |
|----------------|----------|-------------|
-| Per user - x64 | [PowerToysUserSetup-0.90.0-x64.exe][ptUserX64] | 2A6036F5B2D454084E55816C306E1E57EF1D14C916691CBDA42B469797605CE0 |
-| Per user - ARM64 | [PowerToysUserSetup-0.90.0-arm64.exe][ptUserArm64] | AB2E4DC87A9D764BE897C5170E2890E174C89CA912A1916FA3AE1E427536EA4A |
-| Machine wide - x64 | [PowerToysSetup-0.90.0-x64.exe][ptMachineX64] | 12801C44F43D0CC61E90DF1EFDC40E4F3C88341E0199D5B20791042D9B173DCF |
-| Machine wide - ARM64 | [PowerToysSetup-0.90.0-arm64.exe][ptMachineArm64] | 2998007C8FCD7BD2770767C6502AAA2CC75B85EC30DE62986EC7005EB0014EDB |
+| Per user - x64 | [PowerToysUserSetup-0.91.1-x64.exe][ptUserX64] | 42EA4A3E8C79A5456476D19E72B3E2AB9393A89C4DC7442EB7EE5A1E3490D38A |
+| Per user - ARM64 | [PowerToysUserSetup-0.91.1-arm64.exe][ptUserArm64] | F3F433FE04049F9197411D792AADEBF34E3BE7FE16327BD8B73D2A046ED8BAF6 |
+| Machine wide - x64 | [PowerToysSetup-0.91.1-x64.exe][ptMachineX64] | EC4BC3A8625775866B0ED4577CCF83E6EC7B1A0AD267379DDBAF4FE49C7B5BDD |
+| Machine wide - ARM64 | [PowerToysSetup-0.91.1-arm64.exe][ptMachineArm64] | 9CB8911008420D0E446AE3D5CE365E447FA4DF9DCF9337F3A80F933C00FC3689 |
This is our preferred method.
### Via Microsoft Store
-Install from the [Microsoft Store's PowerToys page][microsoft-store-link]. You must be using the [new Microsoft Store](https://blogs.windows.com/windowsExperience/2021/06/24/building-a-new-open-microsoft-store-on-windows-11/) which is available for both Windows 11 and Windows 10.
+Install from the [Microsoft Store's PowerToys page][microsoft-store-link]. You must be using the [new Microsoft Store](https://blogs.windows.com/windowsExperience/2021/06/24/building-a-new-open-microsoft-store-on-windows-11/), which is available for both Windows 11 and Windows 10.
### Via WinGet
-Download PowerToys from [WinGet][winget-link]. Updating PowerToys via winget will respect current PowerToys installation scope. To install PowerToys, run the following command from the command line / PowerShell:
+Download PowerToys from [WinGet][winget-link]. Updating PowerToys via winget will respect the current PowerToys installation scope. To install PowerToys, run the following command from the command line / PowerShell:
#### User scope installer [default]
```powershell
@@ -79,7 +79,7 @@ There is a collection of [third-party plugins](./doc/thirdPartyRunPlugins.md) cr
## Contributing
-This project welcomes contributions of all types. Besides coding features / bug fixes, other ways to assist include spec writing, design, documentation, and finding bugs. We are excited to work with the power user community to build a set of tools for helping you get the most out of Windows.
+This project welcomes contributions of all types. Besides coding features / bug fixes, other ways to assist include spec writing, design, documentation, and finding bugs. We are excited to work with the power user community to build a set of tools for helping you get the most out of Windows.
We ask that **before you start work on a feature that you would like to contribute**, please read our [Contributor's Guide](CONTRIBUTING.md). We would be happy to work with you to figure out the best approach, provide guidance and mentorship throughout feature development, and help avoid any wasted or duplicate effort.
@@ -93,96 +93,168 @@ 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.90 - March 2025 Update
+### 0.91 - May 2025 Update
In this release, we focused on new features, stability, and automation.
**✨Highlights**
-
+ - We focused on greatly improving the Command Palette's performance and fixing a large number of bugs. Some new features we've added are:
+ - Added the ability for Command Palette to search any file using a fallback command.
+ - Added the ability to make the Command Palette global hotkey a low-level keyboard hook.
+ - Added open URL fallback command for the WebSearch extension, enabling users to directly open URLs in the browser from Command Palette.
+ - You can now define custom formats in the Date and Time plugins of PT Run and Command Palette. Thanks [@htcfreek](https://github.com/htcfreek)!
-- 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
+
+ - Fixed an issue where Advanced Paste failed to create the OCR engine for certain English language tags (e.g., en-CA) by initializing the OCR engine with the user profile language. Thanks [@cryolithic](https://github.com/cryolithic)!
### Color Picker
- - 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!
+ - Fixed an issue where a resource leak caused hangs or crashes by properly disposing of the Graphics object. Thanks [@dcog989](https://github.com/dcog989)!
+ - Fixed an issue where Color Picker exited on Backspace keypress by ensuring it only closes when focused and aligning Escape/Backspace behavior. Thanks [@PesBandi](https://github.com/PesBandi)!
+ - Added support for Oklab and Oklch color formats in Color Picker. Thanks [@lemonyte](https://github.com/lemonyte)!
+
+### Command Not Found
+
+ - Updated the WinGet Command Not Found script to only enable the experimental features if they exist.
### Command Palette
-- 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.
+ - Updated bug template to include Command Palette module.
+ - Fixed an issue where the toast window was not scaled for DPI, causing layout issues under display scaling.
+ - Fixed an issue where Up/Down keyboard navigation didn't move selection when the caret was at position 0, and added continuous navigation like PT Run v1. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
+ - Updated the Time and Date extension code to simplify it and improve clarity.
+ - Fixed an issue where capitalization in the command causes failure when trying to go to the mouse pointer, resolved by adjusting the command to lowercase.
+ - Added open URL fallback command for the WebSearch extension, enabling users to directly open URLs in the browser from the Command Palette. Thanks [@htcfreek](https://github.com/htcfreek)!
+ - Added setting to enable/disable system tray icon in CmdPal and aligned terminology with Windows 11. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
+ - Fixed an alias update issue by removing the old alias when a new one is set.
+ - Resolved GitHub casing conflict by migrating Exts and exts into a new ext directory, ensuring consistent structure across platforms and preventing path fragmentation.
+ - Fix an issue where the 'Create New Extension' command generated empty file names.
+ - Added the ability to make the global hotkey a low-level keyboard hook.
+ - Added support for JUMBO thumbnails, enabling access to high-resolution icons.
+ - Fixed crashes when CmdPal auto-hid itself while an MSAL dialog was opened, by preventing CmdPal from hiding if it's disabled.
+ - Added support for immediately selecting search text when a page is loaded.
+ - Fixed a bug where extension settings pages failed to reload on reopen by updating the settings form when extension settings are saved.
+ - Fixed an issue where the Command Palette failed to launch from the runner.
+ - Refactored and ported the PowerToys Run v1 calculator logic into Command Palette, added settings support, and improved fallback behavior.
+ - Re-added support for list item keyboard shortcuts.
+ - Enhanced accessibility in Command Palette by adding proper labels, refining animations, improving localization, and fixed a11y related issues.
+ - Ported custom format support to the Time and Date plugin, reordered and cleaned up settings, improved error messaging, and fixed edge-case crashes for more robust and user-friendly behavior. Thanks [@htcfreek](https://github.com/htcfreek)!
+ - Added fallback item for system command.
+ - Fixed a bug in Windows System Command where the key prompt incorrectly displayed "Empty" for the "Open Recycle Bin" action. Thanks [@jironemo](https://github.com/jironemo)!
+ - Fixed an issue where the 'more commands' list showed commands that shouldn't be visible. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
+ - Fixed an issue where the details view in Command Palette displayed an oversized icon and misaligned text, aligning it with Windows Search behavior.
+ - Fixed a bug where empty screen content and command bar commands were cut off when using long labels, ensuring proper layout and visibility.
+ - Improved CmdPal’s WinGet integration by fixing version display for installed packages, enabling updates with icons, and migrating the preview winget API to a stable version.
+ - Fixed a bug where commands for ContentPage didn't update until after exit, by ensuring context menus are fully initialized when they change.
+ - Added fallback support to the TimeDate extension, enabling direct date/time queries without pre-selecting the command.
+ - Added import of Common.Dotnet.AotCompatibility.props across multiple CmdPal project files to enhance AOT compilation support.
+ - Fixed a crash in CmdPal settings caused by a null HotKey when settings.json is missing or lacks a defined hotkey. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
+ - Added support for filterable, nested context menus in CmdPal, including a search box to maintain focus behavior.
+ - Refactored CmdPal classes to improve JSON serialization and introduced new serialization contexts for better performance and maintainability.
+ - Added support for ahead-of-time (AoT) compilation.
+ - Added retry mechanism for CmdPal launch.
+ - Removed some unused files from CmdPal.Common to simplify the codebase and facilitate marking it as AoT-compatible.
+ - Fixed a bug where a race condition in the update of SearchText caused the cursor in the input box to automatically jump to the end of the line, ensuring SearchText is only updated after it has actually been changed.
+ - Added support for searching any file in the fallback command.
+ - Cleaned up AoT-related code to prevent duplicate operations during testing.
+ - Reduced CmdPal load time by parallelizing extension startup and adding timeouts to prevent misbehaving extensions from blocking others.
+ - Enhanced UI behavior by dismissing the details pane when the list gets emptied, avoiding inconsistent visual states.
+ - Added support to unset the fallback command in CmdPal when no matching command is found, ensuring cleaner reload behavior.
+ - Fixed a leak in the CmdPal extension template by addressing improper ComServer use.
+ - Prevented CmdPal window from maximizing on title bar double-click to maintain intended window behavior. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
+ - Fixed an issue where the Settings UI launched too small by making window dimensions DPI-aware and enforcing minimum width and height using WinUIEx.
+ - Fixed white flash and one-time animation issues in CmdPal by cloaking the window instead of hiding it.
+ - Fixed a bug where all extension settings were fetched on startup by lazy-loading extension settings, reducing initialization overhead.
+ - Added support for protecting CmdPal from crashes on Adaptive Card parse failure.
+ - Replaced shell:AppsFolder with URI activation in CmdPal to improve reliability.
+ - Added ability to open CmdPal settings from PowerToys Settings.
+ - Added ability for CmdPal to observe and dynamically update extension details by tracking property changes on the selected item.
+ - Bumped the toolkit version used in the CmdPal extension template to 0.2.0.
### Image Resizer
- - Fixed warnings in ImageResizer regarding the use of variables "shellItem" and "itemName" without being initialized.
+ - Fixed an issue where deleting an Image Resizer preset removed the wrong preset.
-### Mouse Without Borders
+### Keyboard Manager
- - 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!
+ - Fixed an issue where a modifier key, when set without specifying left or right, would get stuck due to incorrect key handling by tracking the pressed keys and sending the correct key accordingly. Thanks [@mantaionut](https://github.com/mantaionut)!
-### New+
+### PowerRename
- - Added support for variables in template filenames, including date/time components, parent folder name, and environment variables. Thanks [@cgaarden](https://github.com/cgaarden)!
-
-### Peek
-
- - 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!
+ - Enhanced PowerRename's time formatting capabilities by adding 12-hour time format patterns with AM/PM support. Thanks [@bitmap4](https://github.com/bitmap4)!
### PowerToys Run
- - 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)!
+ - Added support for custom formats in the "Time and Date" plugin and improved error messages for invalid input formats. Thanks [@htcfreek](https://github.com/htcfreek)!
+ - Fix two crashes: one for WFT on very early dates and another for calculating the week of the month on very late dates (e.g., 31.12.9999), and reorder UI settings. Thanks [@htcfreek](https://github.com/htcfreek)!
+ - Fix an issue where capitalization in the command causes failure when trying to go to the mouse pointer, resolved by adjusting the command to lowercase.
+ - Added version details to plugin error messages for 'Loading error' and 'Init error'. Thanks [@htcfreek](https://github.com/htcfreek)!
+ - Enhanced result model by adding support for preventing usage-based ordering, giving plugin developers greater control over sorting behavior. Thanks [@CoreyHayward](https://github.com/CoreyHayward) and [@htcfreek](https://github.com/htcfreek)!
+
+### Quick Accent
+
+ - Updated the letter mapping in GetDefaultLetterKeyEPO, replacing "ǔ" with "ŭ" for the VK_U key to accurately reflect Esperanto phonetics. Thanks [@OlegKharchevkin](https://github.com/OlegKharchevkin)!
+ - Fixed an issue where Quick Accent did not work properly when using the on-screen keyboard. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
+
+### Registry Preview
+
+ - Enhanced Registry Preview to support pasting registry keys and values without manually writing the file header, and added a new button for resetting the app. Thanks [@htcfreek](https://github.com/htcfreek)!
### Settings
- - 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)!
+ - Fix an issue where the Settings app randomly showed a blank icon in the taskbar by deferring icon assignment until the window is activated.
+ - Added the ability to maximize the "What's New" window for a more comfortable reading experience.
### Workspaces
- - Fixed an issue where some minimized packaged apps (e.g., Microsoft ToDo, Settings) were not snapshotted.
+ - Fixed bugs where Steam games were not captured or launched correctly by updating window filtering and integrating Steam URL protocol handling.
### Documentation
- - 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.
+ - Added QuickNotes to the third-party plugins documentation for PowerToys Run. Thanks [@ruslanlap](https://github.com/ruslanlap)!
+ - Added Weather and Pomodoro plugins to the PowerToys Run third-party plugin documentation. Thanks [@ruslanlap](https://github.com/ruslanlap)!
+ - Added the Linear plugin to PowerToys Run's third-party plugin documentation. Thanks [@vednig](https://github.com/vednig)!
+ - Fixed formatting issues in documentation files and updated contributor and team member information. Thanks [@DanielEScherzer](https://github.com/DanielEScherzer) and [@RokyZevon](https://github.com/RokyZevon)!
### Development
- - 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.
+ - Updated GitHub Action to install .NET 9 for MSStore release support.
+ - Updated version placeholder in bug_report.yml to prevent incorrect v0.70.0 versioning in issue reports.
+ - Updated GitHub Action to upgrade actions/setup-dotnet from version 3 to version 4 for MSStore release.
+ - Added securityContext to WinGet configuration files, allowing invocation from user context and prompting a single UAC for elevated resources in a separate process. Thanks [@mdanish-kh](https://github.com/mdanish-kh)!
+ - Changed log file extensions from .txt to .log to support proper file associations and tooling compatibility, and added logs for Workspace. Thanks [@benwa](https://github.com/benwa)!
+ - Upgraded testing framework dependencies and aligned package versions across components.
+ - Upgraded dependencies to fix vulnerabilities.
+ - Enhanced repository security by pinning GitHub Actions and Docker tags to immutable full-length commits and integrating automated dependency vulnerability scanning via Dependency Review Workflow. Thanks [@Nick2bad4u](https://github.com/Nick2bad4u)!
+ - Upgraded Boost dependencies to a newer version.
+ - Upgraded toolkit to the latest version, suppressed AoT-related warnings.
+ - Fixed an issue where missing signing for newly added files caused build failures.
+ - Update release pipeline to prevent publishing private symbols for 100 years.
+ - Introduced fuzzing for PowerRename to improve reliability and added setup guidance for extending fuzzing to other C++ modules.
+ - Added centralized pre-creation of generated folders for all .csproj projects to prevent build failures.
+ - Updated WinAppSDK to the latest 1.7 version.
+ - Upgraded Boost dependencies to the latest version for the PowerRename Fuzzing project.
+ - Updated the ADO area path in tsa.json to resolve TSA pipeline errors caused by a deprecated path.
+ - Initiated AoT support for CmdPal with foundational work in progress.
+
+### Tool/General
+ - Added support for automating bug report creation by generating a pre-filled GitHub issue URL with system and diagnostic information. Thanks [@donlaci](https://github.com/donlaci)!
+ - Added scripts to locally build the installer, ensuring the CmdPal can also be launched in a local environment.
+ - Removed export PFX logic to eliminate hardcoded password usage and resolve PSScriptAnalyzer security warning.
+ - Added PowerShell script and CI integration to enforce consistent use of Common.Dotnet.CsWinRT.props across all C# projects under the src folder.
+
+### What is being planned for version 0.92
-
-### What is being planned for version 0.91
+For [v0.92][github-next-release-work], we'll work on the items below:
-For [v0.91][github-next-release-work], we'll work on the items below:
-
- - New module: File Actions Menu
+ - Continued Command Palette polish
- New UI Automation tests
- Working on installer upgrades
- Upgrading Keyboard Manager's editor UI
- - Stability / bug fixes
+ - Stability, bug fixes
## PowerToys Community
@@ -194,7 +266,7 @@ This project has adopted the [Microsoft Open Source Code of Conduct][oss-conduct
## Privacy Statement
-The application logs basic diagnostic data (telemetry). For more information on privacy and what we collect, see our [PowerToys Data and Privacy documentation](https://aka.ms/powertoys-data-and-privacy-documentation).
+The application logs basic diagnostic data (telemetry). For more privacy information and what we collect, see our [PowerToys Data and Privacy documentation](https://aka.ms/powertoys-data-and-privacy-documentation).
[oss-CLA]: https://cla.opensource.microsoft.com
[oss-conduct-code]: CODE_OF_CONDUCT.md
diff --git a/deps/cziplib b/deps/cziplib
index 7a57414261..81314fff0a 160000
--- a/deps/cziplib
+++ b/deps/cziplib
@@ -1 +1 @@
-Subproject commit 7a57414261361ca991ff8053881343eb6bb6f205
+Subproject commit 81314fff0a882b72a9ad321e7a3311660125b56e
diff --git a/doc/devdocs/UITests.md b/doc/devdocs/UITests.md
index b1b91a632c..d02eeb6993 100644
--- a/doc/devdocs/UITests.md
+++ b/doc/devdocs/UITests.md
@@ -21,67 +21,74 @@
- Create a new project and add the following references to the project file. Change the OutputPath to your own module's path.
```
-
- Library
-
- false
-
-
-
- ..\..\..\..\$(Platform)\$(Configuration)\tests\KeyboardManagerUITests\
-
-
-
-
-
-
-
+
+
+
+
+
+ {4E0AE3A4-2EE0-44D7-A2D0-8769977254A0}
+ PowerToys.Hosts.UITests
+ PowerToys.Hosts.UITests
+ false
+ true
+ enable
+ Library
+
+
+ false
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\tests\Hosts.UITests\
+
+
+
+
+
+
+
+
```
- Inherit your test class from UITestBase.
>Set Scope: The default scope starts from the PowerToys settings UI. If you want to start from your own module, set the constructor as shown below:
>Specify Scope:
```
- [TestClass]
- public class RunFancyZonesTest : UITestBase
- {
- public RunFancyZonesTest()
- : base(PowerToysModule.FancyZone)
- {
- }
- }
+ [TestClass]
+ public class HostModuleTests : UITestBase
+ {
+ public HostModuleTests()
+ : base(PowerToysModule.Hosts, WindowSize.Small_Vertical)
+ {
+ }
+ }
```
-- Then you can start using session to perform the UI operations.
+- Then you can start performing the UI operations.
**Example**
```
-using Microsoft.PowerToys.UITest;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-
-namespace UITests_KeyboardManager
+[TestMethod("Hosts.Basic.EmptyViewShouldWork")]
+[TestCategory("Hosts File Editor #4")]
+public void TestEmptyView()
{
- [TestClass]
- public class RunKeyboardManagerUITests : UITestBase
- {
- [TestMethod]
- public void OpenKeyboardManagerEditor()
- {
- // Open KeyboardManagerEditor
- this.Session.Find
-
- PowerToysSetupCustomActions
- {32f3882b-f2d6-4586-b5ed-11e39e522bd3}
+
+ PowerToysSetupCustomActionsVNext
+ {B3A354B0-1E54-4B55-A962-FB5AF9330C19}
True
True
Binaries;Content;Satellites
diff --git a/installer/PowerToysSetupVNext/Product.wxs b/installer/PowerToysSetupVNext/Product.wxs
index 07aa70a9bb..d22a517c55 100644
--- a/installer/PowerToysSetupVNext/Product.wxs
+++ b/installer/PowerToysSetupVNext/Product.wxs
@@ -239,7 +239,7 @@
-
+
diff --git a/installer/wixVNext.props b/installer/wixVNext.props
deleted file mode 100644
index 6f8c6d2fab..0000000000
--- a/installer/wixVNext.props
+++ /dev/null
@@ -1,9 +0,0 @@
-
\ No newline at end of file
diff --git a/src/CmdPalVersion.props b/src/CmdPalVersion.props
index e9e0e98130..2be9bc69d4 100644
--- a/src/CmdPalVersion.props
+++ b/src/CmdPalVersion.props
@@ -1,7 +1,8 @@
- 0.0.1
+ $(XES_APPXMANIFESTVERSION)
+ 0.0.1.0
Local
diff --git a/src/Common.Dotnet.AotCompatibility.props b/src/Common.Dotnet.AotCompatibility.props
index 71c490fd6c..82988104dd 100644
--- a/src/Common.Dotnet.AotCompatibility.props
+++ b/src/Common.Dotnet.AotCompatibility.props
@@ -7,6 +7,6 @@
2
- IL2081
+ IL2081;CsWinRT1028;$(WarningsNotAsErrors)
diff --git a/src/Common.Dotnet.CsWinRT.props b/src/Common.Dotnet.CsWinRT.props
index cde2ce69ce..63b40dc66a 100644
--- a/src/Common.Dotnet.CsWinRT.props
+++ b/src/Common.Dotnet.CsWinRT.props
@@ -4,8 +4,8 @@
- 10.0.22621.57
- net9.0-windows10.0.22621.0
+ 10.0.26100.68-preview
+ net9.0-windows10.0.26100.0
10.0.19041.0
10.0.19041.0
win-x64;win-arm64
@@ -16,13 +16,13 @@
4
True
- CA1720;CA1859;CA2263;CA2022;MVVMTK0045;MVVMTK0049
+ CA1824;CA1416;CA1720;CA1859;CA2263;CA2022;MVVMTK0045;MVVMTK0049
true
DEBUG;TRACE
- full
+ portable
false
@@ -43,4 +43,4 @@
-
\ No newline at end of file
+
diff --git a/src/codeAnalysis/GlobalSuppressions.cs b/src/codeAnalysis/GlobalSuppressions.cs
index d5ff98e548..ae544b0c76 100644
--- a/src/codeAnalysis/GlobalSuppressions.cs
+++ b/src/codeAnalysis/GlobalSuppressions.cs
@@ -76,3 +76,47 @@ using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", "MVVMTK0049:Using [INotifyPropertyChanged] is not AOT compatible for WinRT", Justification = "Updated MVVM toolkit package introduced this.", Scope = "namespaceanddescendants", Target = "Peek.FilePreviewer")]
[assembly: SuppressMessage("CommunityToolkit.Mvvm.SourceGenerators.INotifyPropertyChangedGenerator", "MVVMTK0049:Using [INotifyPropertyChanged] is not AOT compatible for WinRT", Justification = "Updated MVVM toolkit package introduced this.", Scope = "type", Target = "~T:Peek.UI.Views.TitleBar")]
[assembly: SuppressMessage("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", "MVVMTK0049:Using [INotifyPropertyChanged] is not AOT compatible for WinRT", Justification = "Updated MVVM toolkit package introduced this.", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib")]
+
+// HexBox control in RegistryPreviewUILib (We decided to copy the original code and not fix all theses problems for easier updating.)
+[assembly: SuppressMessage("Design", "CA1001:Types that own disposable fields should be disposable", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("Design", "CA1051:Do not declare visible instance fields", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("Globalization", "CA1305:Specify IFormatProvider", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("Naming", "CA1720:Identifiers should not contain type names", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("Performance", "CA1805:Do not initialize unnecessarily", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1623:Property summary documentation should match accessors", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1642:Constructor summary documentation should begin with standard text", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1648: has been used on an element that doesn't inherit from a base class or implement an interface.", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1649:File name should match first type name", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1500:Braces for multi-line statements should not share line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1502:Element should not be on a single line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1505:Opening braces should not be followed by blank line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1507:Code should not contain multiple blank lines in a row", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1508:Closing braces should not be preceded by blank line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1509:Opening braces should not be preceded by blank line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1512:Single-line comments should not be followed by blank line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1513:Closing brace should be followed by blank line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1514:Element documentation header should be preceded by blank line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1515:Single-line comment should be preceded by blank line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1516:Elements should be separated by blank line", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1119:Statement should not use unnecessary parenthesis", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1401:Fields should be private", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1407:Arithmetic expressions should declare precedence", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1413:Use trailing comma in multi-line initializers", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:Element should begin with upper-case letter", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.NamingRules", "SA1306:Field names should begin with lower-case letter", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.NamingRules", "SA1312:Variable names should begin with lower-case letter", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.NamingRules", "SA1313:Parameter names should begin with lower-case letter", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1200:Using directives should be placed correctly", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1108:Block statements should not contain embedded comments", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1116:Split parameters should start on line after declaration", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1117:Parameters should be on same line or separate lines", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1129:Do not use default value type constructor", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1000:Keywords should be spaced correctly", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1003:Symbols should be spaced correctly", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1005:Single line comments should begin with single space", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1024:Colons Should Be Spaced Correctly", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1025:Code should not contain multiple whitespace in a row", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1028:Code should not contain trailing whitespace", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
+[assembly: SuppressMessage("Usage", "CsWinRT1028:Class is not marked partial", Justification = "", Scope = "namespaceanddescendants", Target = "RegistryPreviewUILib.HexBox")]
diff --git a/src/common/CalculatorEngineCommon/Calculator.cpp b/src/common/CalculatorEngineCommon/Calculator.cpp
new file mode 100644
index 0000000000..0d96945560
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/Calculator.cpp
@@ -0,0 +1,24 @@
+#include "pch.h"
+#include "Calculator.h"
+#include "Calculator.g.cpp"
+#include "ExprtkEvaluator.h"
+
+namespace winrt::CalculatorEngineCommon::implementation
+{
+ Calculator::Calculator(winrt::Windows::Foundation::Collections::IPropertySet const& constants)
+ {
+ for (auto const& pair : constants)
+ {
+ auto key = pair.Key();
+ auto value = winrt::unbox_value(pair.Value());
+ m_constants.emplace(winrt::to_string(key), value);
+ }
+ }
+
+ hstring Calculator::EvaluateExpression(hstring const& expression)
+ {
+ auto result = ExprtkCalculator::internal::EvaluateExpression(winrt::to_string(expression), m_constants);
+
+ return hstring(result);
+ }
+}
diff --git a/src/common/CalculatorEngineCommon/Calculator.h b/src/common/CalculatorEngineCommon/Calculator.h
new file mode 100644
index 0000000000..abf2a4ec0d
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/Calculator.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "Calculator.g.h"
+
+namespace winrt::CalculatorEngineCommon::implementation
+{
+ struct Calculator : CalculatorT
+ {
+ Calculator() = default;
+
+ Calculator(winrt::Windows::Foundation::Collections::IPropertySet const& constants);
+
+ winrt::hstring EvaluateExpression(winrt::hstring const& expression);
+
+ private:
+ std::unordered_map m_constants;
+ };
+}
+
+namespace winrt::CalculatorEngineCommon::factory_implementation
+{
+ struct Calculator : CalculatorT
+ {
+ };
+}
diff --git a/src/common/CalculatorEngineCommon/Calculator.idl b/src/common/CalculatorEngineCommon/Calculator.idl
new file mode 100644
index 0000000000..241a517a7d
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/Calculator.idl
@@ -0,0 +1,10 @@
+namespace CalculatorEngineCommon
+{
+ [default_interface]
+ runtimeclass Calculator
+ {
+ Calculator();
+ Calculator(Windows.Foundation.Collections.IPropertySet constants);
+ String EvaluateExpression(String expression);
+ }
+}
diff --git a/src/common/CalculatorEngineCommon/CalculatorEngineCommon.def b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.def
new file mode 100644
index 0000000000..24e7c1235c
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.def
@@ -0,0 +1,3 @@
+EXPORTS
+DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE
+DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE
diff --git a/src/modules/cmdpal/CmdPalKeyboardService/CmdPalKeyboardService.rc b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.rc
similarity index 85%
rename from src/modules/cmdpal/CmdPalKeyboardService/CmdPalKeyboardService.rc
rename to src/common/CalculatorEngineCommon/CalculatorEngineCommon.rc
index 5fa3c8b90d..5a515fef17 100644
--- a/src/modules/cmdpal/CmdPalKeyboardService/CmdPalKeyboardService.rc
+++ b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.rc
@@ -1,10 +1,6 @@
#include
#include "resource.h"
-#include "../../../common/version/version.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-#include "winres.h"
-#undef APSTUDIO_READONLY_SYMBOLS
+#include "../version/version.h"
1 VERSIONINFO
FILEVERSION FILE_VERSION
@@ -17,7 +13,7 @@ FILEFLAGS 0x0L
#endif
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_DLL
-FILESUBTYPE VFT2_UNKNOWN
+FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
diff --git a/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj
new file mode 100644
index 0000000000..43f4749892
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj
@@ -0,0 +1,190 @@
+
+
+
+
+ true
+ true
+ {2cf78cf7-8feb-4be1-9591-55fa25b48fc6}
+ CalculatorEngineCommon
+ CalculatorEngineCommon
+ false
+
+
+
+ true
+ false
+
+
+
+
+ true
+ true
+ en-US
+ 17.0
+ 10.0
+
+
+ true
+ true
+ true
+ Windows Store
+ false
+
+
+
+
+ <_VC_Target_Library_Platform>Desktop
+ <_NoWinAPIFamilyApp>true
+
+
+
+
+ DynamicLibrary
+ v143
+ Unicode
+ false
+
+
+ true
+ true
+
+
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalculatorEngineCommon
+ ..\..\..\$(Platform)\$(Configuration)\
+
+
+
+ $(IntDir)pch.pch
+ Level4
+ %(AdditionalOptions) /bigobj
+ _WINRT_DLL;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)
+ ../../..;%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+
+
+ Console
+ false
+ CalculatorEngineCommon.def
+ Shell32.lib;user32.lib;%(AdditionalDependencies)
+
+
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+
+
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ true
+
+
+
+
+ {cc6e41ac-8174-4e8a-8d22-85dd7f4851df}
+
+
+
+
+
+
+
+ Calculator.idl
+
+
+
+
+
+ NotUsing
+
+
+ Create
+
+
+ Calculator.idl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
+
+
+
+
+ MultiThreadedDebug
+ stdcpp17
+
+
+
+ %(IgnoreSpecificDefaultLibraries);libucrtd.lib
+ %(AdditionalOptions) /defaultlib:ucrtd.lib
+
+
+
+
+
+ MultiThreaded
+
+
+
+ %(IgnoreSpecificDefaultLibraries);libucrt.lib
+ %(AdditionalOptions) /defaultlib:ucrt.lib
+
+
+
+
\ No newline at end of file
diff --git a/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj.filters b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj.filters
new file mode 100644
index 0000000000..6b84b33112
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj.filters
@@ -0,0 +1,29 @@
+
+
+
+
+ accd3aa8-1ba0-4223-9bbe-0c431709210b
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms
+
+
+ {926ab91d-31b4-48c3-b9a4-e681349f27f0}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/common/CalculatorEngineCommon/ExprtkEvaluator.cpp b/src/common/CalculatorEngineCommon/ExprtkEvaluator.cpp
new file mode 100644
index 0000000000..dbc2120b24
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/ExprtkEvaluator.cpp
@@ -0,0 +1,50 @@
+#include "ExprtkEvaluator.h"
+#include "exprtk.hpp"
+#include
+#include
+#include
+
+namespace ExprtkCalculator::internal
+{
+
+ std::wstring ToWStringFullPrecision(double value)
+ {
+ std::wostringstream oss;
+ oss << std::fixed << std::setprecision(15) << value;
+ return oss.str();
+ }
+
+ std::wstring EvaluateExpression(
+ const std::string& expressionText,
+ const std::unordered_map& constants)
+ {
+ exprtk::symbol_table symbol_table;
+
+ for (auto const& [name, value] : constants)
+ {
+ symbol_table.add_constant(name, value);
+ }
+
+ exprtk::expression expression;
+ expression.register_symbol_table(symbol_table);
+
+ exprtk::parser parser;
+
+ // Enable all base functions and arithmetic operators
+ parser.settings().enable_all_base_functions(); // Enable all base functions like sin, cos, log, etc.
+ parser.settings().enable_all_arithmetic_ops(); // Enable all arithmetic operators like +, -, *, /, etc.
+
+ // Disable all control structures and assignment operators to ensure only expressions are evaluated
+ parser.settings().disable_all_control_structures(); // Disable control structures like if, for, while, etc.
+ parser.settings().disable_all_assignment_ops(); // Disable assignment operators like =, +=, -=, etc.
+
+ // Disabled for now, but can be enabled later for enhanced functionality
+ parser.settings().disable_all_logic_ops(); // Disable logical operators like &&, ||, !, etc.
+ parser.settings().disable_all_inequality_ops(); // Disable inequality operators like <, >, <=, >=, !=, etc.
+
+ if (!parser.compile(expressionText, expression))
+ return L"NaN";
+
+ return ToWStringFullPrecision(expression.value());
+ }
+}
\ No newline at end of file
diff --git a/src/common/CalculatorEngineCommon/ExprtkEvaluator.h b/src/common/CalculatorEngineCommon/ExprtkEvaluator.h
new file mode 100644
index 0000000000..bd09774b96
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/ExprtkEvaluator.h
@@ -0,0 +1,10 @@
+#pragma once
+#include
+#include
+
+namespace ExprtkCalculator::internal
+{
+ std::wstring EvaluateExpression(
+ const std::string& expression,
+ const std::unordered_map& constants);
+}
\ No newline at end of file
diff --git a/src/common/CalculatorEngineCommon/PropertySheet.props b/src/common/CalculatorEngineCommon/PropertySheet.props
new file mode 100644
index 0000000000..e34141b019
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/PropertySheet.props
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/common/CalculatorEngineCommon/exprtk.hpp b/src/common/CalculatorEngineCommon/exprtk.hpp
new file mode 100644
index 0000000000..6ad76542f4
--- /dev/null
+++ b/src/common/CalculatorEngineCommon/exprtk.hpp
@@ -0,0 +1,46251 @@
+/*
+ ******************************************************************
+ * C++ Mathematical Expression Toolkit Library *
+ * *
+ * Author: Arash Partow (1999-2024) *
+ * URL: https://www.partow.net/programming/exprtk/index.html *
+ * *
+ * Copyright notice: *
+ * Free use of the C++ Mathematical Expression Toolkit Library is *
+ * permitted under the guidelines and in accordance with the most *
+ * current version of the MIT License. *
+ * https://www.opensource.org/licenses/MIT *
+ * SPDX-License-Identifier: MIT *
+ * *
+ * Example expressions: *
+ * (00) (y + x / y) * (x - y / x) *
+ * (01) (x^2 / sin(2 * pi / y)) - x / 2 *
+ * (02) sqrt(1 - (x^2)) *
+ * (03) 1 - sin(2 * x) + cos(pi / y) *
+ * (04) a * exp(2 * t) + c *
+ * (05) if(((x + 2) == 3) and ((y + 5) <= 9), 1 + w, 2 / z) *
+ * (06) (avg(x,y) <= x + y ? x - y : x * y) + 2 * pi / x *
+ * (07) z := x + sin(2 * pi / y) *
+ * (08) u := 2 * (pi * z) / (w := x + cos(y / pi)) *
+ * (09) clamp(-1, sin(2 * pi * x) + cos(y / 2 * pi), +1) *
+ * (10) inrange(-2, m, +2) == if(({-2 <= m} and [m <= +2]), 1, 0) *
+ * (11) (2sin(x)cos(2y)7 + 1) == (2 * sin(x) * cos(2*y) * 7 + 1) *
+ * (12) (x ilike 's*ri?g') and [y < (3 z^7 + w)] *
+ * *
+ ******************************************************************
+*/
+
+#pragma system_header
+
+#ifndef INCLUDE_EXPRTK_HPP
+#define INCLUDE_EXPRTK_HPP
+
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include