Skip to content
Open
Show file tree
Hide file tree
Changes from 153 commits
Commits
Show all changes
155 commits
Select commit Hold shift + click to select a range
03587ae
[WIP] Shortcut Guide V2
noraa-junker Oct 14, 2024
7a6189b
Changed style a little bit
noraa-junker Oct 14, 2024
c81a423
Push
noraa-junker Nov 2, 2024
d5f5500
Push
noraa-junker Nov 3, 2024
22dc870
Code cleanup
noraa-junker Nov 3, 2024
a14c458
Fix display on monitor with mouse and move all NaticeMethods to Nativ…
noraa-junker Nov 3, 2024
da7b789
Fix error messages and read application titles out of index manifest
noraa-junker Nov 10, 2024
6952deb
Rename YmlInterpreter to ManifestInterpreter
noraa-junker Nov 10, 2024
a292a92
Merge main
noraa-junker Jun 6, 2025
b16b457
push
noraa-junker Jun 6, 2025
7ce5182
Add support for multiple shortcuts
noraa-junker Jun 7, 2025
569f072
Add copying keyboard manifests and other improvements
noraa-junker Jun 11, 2025
54d176c
Add keyboard accelerator to the search box
noraa-junker Jun 11, 2025
0b823ea
Handle errors displaying app and close window automatically on focus …
noraa-junker Jun 11, 2025
7596e96
Add taskbar indicators
noraa-junker Jun 13, 2025
46df486
Refactoring and localisation
noraa-junker Jun 15, 2025
da77396
Remove some hosts references and fix close button
noraa-junker Jun 15, 2025
a6b7614
Refactoring
noraa-junker Jun 18, 2025
d73ab4f
Remove old Shortcut Guide
noraa-junker Jul 27, 2025
07760e4
Remove legacy shortcut behaviour
noraa-junker Jul 27, 2025
1580279
Fix closing by shortcut add closing by ESC and fix missing files from…
noraa-junker Jul 27, 2025
ba40989
Merge main in
noraa-junker Jul 27, 2025
3e75fb0
Merge main in
noraa-junker Jul 27, 2025
95e0a20
Merge branch 'feature/shortcutguidev2' of https://github.com/microsof…
noraa-junker Jul 27, 2025
e26bf2a
Merge branch 'feature/shortcutguidev2' of https://github.com/microsof…
noraa-junker Jul 27, 2025
be799dd
Merge branch 'feature/shortcutguidev2' of https://github.com/microsof…
noraa-junker Jul 27, 2025
038cd23
Merge branch 'feature/shortcutguidev2' of https://github.com/microsof…
noraa-junker Jul 27, 2025
eed6dc6
Merge branch 'feature/shortcutguidev2' of https://github.com/microsof…
noraa-junker Jul 27, 2025
3a8431a
Only display powertoys shortcuts if the modules are enabled
noraa-junker Jul 27, 2025
82b0ca7
Fix pinning and unpinning shortcuts
noraa-junker Jul 27, 2025
3475c92
Delete weird file
noraa-junker Jul 27, 2025
fe3d481
Fix spelling
noraa-junker Jul 27, 2025
201a27d
Add taskbar launch shortcuts and make powertoys shortcuts empty by de…
noraa-junker Jul 27, 2025
7e2fc44
Add taskbar launch shortcuts and make powertoys shortcuts empty by de…
noraa-junker Jul 27, 2025
fa54b49
Make settings button work and add settings placeholder
noraa-junker Jul 27, 2025
e3b1ec3
commit
noraa-junker Jul 27, 2025
7e50caa
Add disclaimers
noraa-junker Jul 27, 2025
a306797
Make UI better
noraa-junker Jul 27, 2025
2ee02c4
Fix spelling
noraa-junker Jul 27, 2025
b12fcf6
Localization
noraa-junker Jul 27, 2025
e0e7bf4
Respect theme selection
noraa-junker Jul 27, 2025
0f85f8b
Respect excluded apps
noraa-junker Jul 27, 2025
f9183af
Add welcome screen and update settings and OOBE
noraa-junker Jul 28, 2025
71dd8fe
Add attribution in settings
noraa-junker Jul 28, 2025
56f056e
Add explorer shortcuts, fix animation stopping and add an error when …
noraa-junker Jul 28, 2025
2f89281
Refactoring, commenting and fixing some little lefrover bugs
noraa-junker Jul 28, 2025
1982f26
Add documentation and only export in tasklist_positions what needs to…
noraa-junker Jul 29, 2025
0e2f466
Fix building in release mode and some other stuff
noraa-junker Jul 29, 2025
498c8d5
Fix xaml styling
noraa-junker Jul 29, 2025
273b50c
Fix arm64 configuration
noraa-junker Jul 29, 2025
7e7bb04
So something was not right. Hopefully this fixes it.
noraa-junker Jul 30, 2025
3b77feb
Merge branch 'main' into feature/shortcutguidev2
noraa-junker Jul 30, 2025
3c1a6a5
That is a kinda embarrasing error
noraa-junker Jul 30, 2025
1da76e5
Merge branch 'feature/shortcutguidev2' of https://github.com/microsof…
noraa-junker Jul 30, 2025
2d12932
Remove failing test
noraa-junker Jul 30, 2025
3796fdb
Forgot notice.md and CPPProject has some trouble buildinng release x64
noraa-junker Jul 30, 2025
0b6683e
Make some adjustants to how the windows key is displayed
noraa-junker Aug 1, 2025
77a5bc2
Adress some PR comments and fix some bugs
noraa-junker Aug 1, 2025
7266745
Fix xaml styling
noraa-junker Aug 1, 2025
e116265
Factor out TaskbarIndicator
noraa-junker Aug 3, 2025
a41be80
Fix styling
noraa-junker Aug 3, 2025
6bd5c4c
Change some StaticResources to ThemeResources and change style of tas…
noraa-junker Aug 3, 2025
271e0c0
Change oobe design
noraa-junker Aug 4, 2025
0abae1d
close infotip when link is clicked and remove unneccesairy grid
noraa-junker Aug 4, 2025
d568d16
git messed up
noraa-junker Aug 4, 2025
f42b392
fix xaml styling
noraa-junker Aug 5, 2025
8e7be16
Change display name of File Explorer, hide taskbar indicators on othe…
noraa-junker Aug 7, 2025
69c6475
[WIP] Shortcut Guide V2
noraa-junker Oct 14, 2024
55b3e15
Changed style a little bit
noraa-junker Oct 14, 2024
6558260
Push
noraa-junker Nov 2, 2024
2f4766d
Push
noraa-junker Nov 3, 2024
ddd090c
Code cleanup
noraa-junker Nov 3, 2024
acf510d
Fix display on monitor with mouse and move all NaticeMethods to Nativ…
noraa-junker Nov 3, 2024
440e751
Fix error messages and read application titles out of index manifest
noraa-junker Nov 10, 2024
2b16068
Rename YmlInterpreter to ManifestInterpreter
noraa-junker Nov 10, 2024
6b8a3e6
push
noraa-junker Jun 6, 2025
44d12c6
Add support for multiple shortcuts
noraa-junker Jun 7, 2025
9ecf82d
Add copying keyboard manifests and other improvements
noraa-junker Jun 11, 2025
0a07811
Add keyboard accelerator to the search box
noraa-junker Jun 11, 2025
7acab45
Handle errors displaying app and close window automatically on focus …
noraa-junker Jun 11, 2025
e6edca9
Add taskbar indicators
noraa-junker Jun 13, 2025
3302e61
Refactoring and localisation
noraa-junker Jun 15, 2025
afc27e8
Remove some hosts references and fix close button
noraa-junker Jun 15, 2025
48d8e33
Refactoring
noraa-junker Jun 18, 2025
7dc8c10
Remove old Shortcut Guide
noraa-junker Jul 27, 2025
411f4df
Remove legacy shortcut behaviour
noraa-junker Jul 27, 2025
eff58e1
Fix closing by shortcut add closing by ESC and fix missing files from…
noraa-junker Jul 27, 2025
bff3874
Only display powertoys shortcuts if the modules are enabled
noraa-junker Jul 27, 2025
639b29e
Fix pinning and unpinning shortcuts
noraa-junker Jul 27, 2025
26f7610
Delete weird file
noraa-junker Jul 27, 2025
509ad63
Fix spelling
noraa-junker Jul 27, 2025
0d5c85a
Add taskbar launch shortcuts and make powertoys shortcuts empty by de…
noraa-junker Jul 27, 2025
16c4a56
Make settings button work and add settings placeholder
noraa-junker Jul 27, 2025
e70ca56
Add taskbar launch shortcuts and make powertoys shortcuts empty by de…
noraa-junker Jul 27, 2025
68a10d0
Add disclaimers
noraa-junker Jul 27, 2025
68b7b41
Make UI better
noraa-junker Jul 27, 2025
b1d5233
Fix spelling
noraa-junker Jul 27, 2025
f8cc513
Localization
noraa-junker Jul 27, 2025
2e6f80f
Respect theme selection
noraa-junker Jul 27, 2025
3458d01
Respect excluded apps
noraa-junker Jul 27, 2025
84ab120
Add welcome screen and update settings and OOBE
noraa-junker Jul 28, 2025
145247c
Add attribution in settings
noraa-junker Jul 28, 2025
97cba61
Add explorer shortcuts, fix animation stopping and add an error when …
noraa-junker Jul 28, 2025
84d4cbb
Refactoring, commenting and fixing some little lefrover bugs
noraa-junker Jul 28, 2025
4cb9c53
Add documentation and only export in tasklist_positions what needs to…
noraa-junker Jul 29, 2025
6d7d5f9
Fix building in release mode and some other stuff
noraa-junker Jul 29, 2025
5c11c75
Fix xaml styling
noraa-junker Jul 29, 2025
b553add
Fix arm64 configuration
noraa-junker Jul 29, 2025
387b7e9
So something was not right. Hopefully this fixes it.
noraa-junker Jul 30, 2025
3b7df37
That is a kinda embarrasing error
noraa-junker Jul 30, 2025
ac789a7
Remove failing test
noraa-junker Jul 30, 2025
cd844e3
Forgot notice.md and CPPProject has some trouble buildinng release x64
noraa-junker Jul 30, 2025
dc0877e
Make some adjustants to how the windows key is displayed
noraa-junker Aug 1, 2025
bb16ae1
Adress some PR comments and fix some bugs
noraa-junker Aug 1, 2025
19f9506
Fix xaml styling
noraa-junker Aug 1, 2025
72be095
Factor out TaskbarIndicator
noraa-junker Aug 3, 2025
dceb1d7
Fix styling
noraa-junker Aug 3, 2025
4853bd0
Change some StaticResources to ThemeResources and change style of tas…
noraa-junker Aug 3, 2025
a764bf3
Change oobe design
noraa-junker Aug 4, 2025
0917a64
close infotip when link is clicked and remove unneccesairy grid
noraa-junker Aug 4, 2025
73f718c
git messed up
noraa-junker Aug 4, 2025
e53e1b4
fix xaml styling
noraa-junker Aug 5, 2025
4aff341
Change display name of File Explorer, hide taskbar indicators on othe…
noraa-junker Aug 7, 2025
b9c1181
Add back missing project because of rebase from main:
yeelam-gordon Aug 19, 2025
e7582eb
Add back empty line which is missing during rebase main
yeelam-gordon Aug 19, 2025
200afb5
merge main
noraa-junker Aug 20, 2025
d652285
[UX] Vertical shortcutguide (#41161)
niels9001 Oct 17, 2025
9d480c8
Merge conflicts
noraa-junker Oct 18, 2025
5054a77
Fix solution merge error
noraa-junker Oct 18, 2025
f646e03
Fix wrong number for Taskbar item 10
noraa-junker Oct 18, 2025
841a5c5
Fixed (un)pinning shortcuts
noraa-junker Oct 18, 2025
e76506d
Localization
noraa-junker Oct 18, 2025
486bec0
Fix empty windows key
noraa-junker Oct 18, 2025
d58145e
add zoomit shortcuts comment
noraa-junker Oct 25, 2025
f867323
Update OOBE string, supress window resizing and fix auto closing when…
noraa-junker Oct 25, 2025
f537c43
Added right key visuals and fixed some UI bugs
noraa-junker Oct 27, 2025
55038c3
Fix missing localization on settings button
noraa-junker Oct 27, 2025
c184acb
Fix xaml styling
noraa-junker Oct 27, 2025
552b02d
Fix spawning window on the right monitor
noraa-junker Oct 27, 2025
e0f72df
Update ShortcutGuide image
noraa-junker Oct 28, 2025
877626e
Added manifest file in
noraa-junker Oct 28, 2025
2e8ad48
Fix some spelling issues
noraa-junker Oct 28, 2025
b26ded5
Fix spelling
noraa-junker Oct 28, 2025
e3a1f97
Fix spelling
noraa-junker Oct 28, 2025
e82c2d2
Fix spelling again
noraa-junker Oct 28, 2025
b4773af
Fix installer
noraa-junker Oct 28, 2025
88357a5
Fixed spawning on wrong display and taskbar window not working under …
noraa-junker Oct 29, 2025
3df4b45
Merge remote-tracking branch 'origin/main' into feature/shortcutguidev2
noraa-junker Oct 29, 2025
1d1ae0d
Merge main
noraa-junker Oct 31, 2025
efc814a
merge main
noraa-junker Feb 1, 2026
a51fe19
merge main and adapt to new modules (aswell fix no taskbar bug)
noraa-junker Feb 1, 2026
3a4f9c2
Move cpp project files to powertoys.interop
noraa-junker Feb 1, 2026
b9c5c15
Fix taskbar indicator to work with the latest canary builds
noraa-junker Feb 2, 2026
9f9d221
Adjust docs
noraa-junker Feb 2, 2026
250a8cb
Merge main
noraa-junker Apr 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/actions/spell-check/allow/code.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ resw
resx
srt
Stereolithography
taskmgr
terabyte
UYVY
xbf
Expand Down Expand Up @@ -320,6 +321,10 @@ MRUCMPPROC
MRUINFO
REGSTR

#Xaml
NVI
Storyboards

# Misc Win32 APIs and PInvokes
INVOKEIDLIST

Expand Down
6 changes: 6 additions & 0 deletions .github/actions/spell-check/expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -858,6 +858,8 @@ jpnime
Jsons
jsonval
jxr
KBSC
kdc
keybd
KEYBDDATA
KEYBDINPUT
Expand Down Expand Up @@ -1268,6 +1270,7 @@ OUTOFCONTEXT
Outptr
outputtype
outsettings
outsourced
OVERLAPPEDWINDOW
Oversampling
OVERWRITEPROMPT
Expand Down Expand Up @@ -1333,6 +1336,7 @@ pici
pidl
PIDLIST
pii
pinboard
pinfo
pinvoke
pipename
Expand Down Expand Up @@ -1413,6 +1417,7 @@ projectname
PROPERTYKEY
Propset
PROPVARIANT
Prt
PRTL
prvpane
psapi
Expand Down Expand Up @@ -2088,6 +2093,7 @@ WNDCLASSW
WNDPROC
wnode
wom
workerw
WORKSPACESEDITOR
WORKSPACESLAUNCHER
WORKSPACESSNAPSHOTTOOL
Expand Down
8 changes: 6 additions & 2 deletions .pipelines/ESRPSigning_core.json
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,12 @@
"WinUI3Apps\\PowerToys.RegistryPreview.dll",
"WinUI3Apps\\PowerToys.RegistryPreview.exe",

"PowerToys.ShortcutGuide.exe",
"PowerToys.ShortcutGuideModuleInterface.dll",
"WinUI3Apps\\PowerToys.ShortcutGuide.exe",
"WinUI3Apps\\PowerToys.ShortcutGuide.dll",
"WinUI3Apps\\PowerToys.ShortcutGuideModuleInterface.dll",
"WinUI3Apps\\PowerToys.ShortcutGuide.IndexYmlGenerator.dll",
"WinUI3Apps\\PowerToys.ShortcutGuide.IndexYmlGenerator.exe",
"WinUI3Apps\\ShortcutGuide.CPPProject.dll",

"PowerToys.ZoomIt.exe",
"PowerToys.ZoomItModuleInterface.dll",
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@
<PackageVersion Include="WinUIEx" Version="2.8.0" />
<PackageVersion Include="WPF-UI" Version="3.0.5" />
<PackageVersion Include="WyHash" Version="1.0.5" />
<PackageVersion Include="YamlDotNet" Version="16.3.0" />
<PackageVersion Include="WixToolset.Heat" Version="5.0.2" />
<PackageVersion Include="WixToolset.Firewall.wixext" Version="5.0.2" />
<PackageVersion Include="WixToolset.Util.wixext" Version="5.0.2" />
Expand Down
3 changes: 2 additions & 1 deletion NOTICE.md
Original file line number Diff line number Diff line change
Expand Up @@ -1570,4 +1570,5 @@ SOFTWARE.
- UTF.Unknown
- WinUIEx
- WPF-UI
- WyHash
- WyHash
- YamlDotNet
25 changes: 16 additions & 9 deletions PowerToys.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@
</Project>
</Folder>
<Folder Name="/modules/FileLocksmith/">
<Project Path="src/modules/FileLocksmith/FileLocksmithCLI/FileLocksmithCLI.vcxproj" Id="49D456D3-F485-45AF-8875-45B44F193DDC" />
<Project Path="src/modules/FileLocksmith/FileLocksmithCLI/FileLocksmithCLI.vcxproj" Id="49d456d3-f485-45af-8875-45b44f193ddc" />
<Project Path="src/modules/FileLocksmith/FileLocksmithContextMenu/FileLocksmithContextMenu.vcxproj" Id="799a50d8-de89-4ed1-8ff8-ad5a9ed8c0ca" />
<Project Path="src/modules/FileLocksmith/FileLocksmithExt/FileLocksmithExt.vcxproj" Id="57175ec7-92a5-4c1e-8244-e3fbca2a81de" />
<Project Path="src/modules/FileLocksmith/FileLocksmithLib/FileLocksmithLib.vcxproj" Id="9d52fd25-ef90-4f9a-a015-91efc5daf54f" />
Expand All @@ -439,7 +439,7 @@
</Project>
</Folder>
<Folder Name="/modules/FileLocksmith/Tests/">
<Project Path="src/modules/FileLocksmith/FileLocksmithCLI/tests/FileLocksmithCLIUnitTests.vcxproj" Id="A1B2C3D4-E5F6-7890-1234-567890ABCDEF" />
<Project Path="src/modules/FileLocksmith/FileLocksmithCLI/tests/FileLocksmithCLIUnitTests.vcxproj" Id="a1b2c3d4-e5f6-7890-1234-567890abcdef" />
</Folder>
<Folder Name="/modules/Hosts/">
<Project Path="src/modules/Hosts/Hosts/Hosts.csproj">
Expand All @@ -465,13 +465,13 @@
</Folder>
<Folder Name="/modules/imageresizer/">
<Project Path="src/modules/imageresizer/dll/ImageResizerExt.vcxproj" Id="0b43679e-edfa-4da0-ad30-f4628b308b1b" />
<Project Path="src/modules/imageresizer/ImageResizerContextMenu/ImageResizerContextMenu.vcxproj" Id="93b72a06-c8bd-484f-a6f7-c9f280b150bf" />
<Project Path="src/modules/imageresizer/ImageResizerLib/ImageResizerLib.vcxproj" Id="18b3db45-4ffe-4d01-97d6-5223feee1853" />
<Project Path="src/modules/imageresizer/ui/ImageResizerUI.csproj">
<Project Path="src/modules/imageresizer/ImageResizerCLI/ImageResizerCLI.csproj">
<Platform Solution="*|ARM64" Project="ARM64" />
<Platform Solution="*|x64" Project="x64" />
</Project>
<Project Path="src/modules/imageresizer/ImageResizerCLI/ImageResizerCLI.csproj">
<Project Path="src/modules/imageresizer/ImageResizerContextMenu/ImageResizerContextMenu.vcxproj" Id="93b72a06-c8bd-484f-a6f7-c9f280b150bf" />
<Project Path="src/modules/imageresizer/ImageResizerLib/ImageResizerLib.vcxproj" Id="18b3db45-4ffe-4d01-97d6-5223feee1853" />
<Project Path="src/modules/imageresizer/ui/ImageResizerUI.csproj">
<Platform Solution="*|ARM64" Project="ARM64" />
<Platform Solution="*|x64" Project="x64" />
</Project>
Expand Down Expand Up @@ -961,9 +961,16 @@
<Platform Solution="*|x64" Project="x64" />
</Project>
</Folder>
<Folder Name="/modules/shortcutguide/">
<Project Path="src/modules/ShortcutGuide/ShortcutGuide/ShortcutGuide.vcxproj" Id="2edb3eb4-fa92-4bff-b2d8-566584837231" />
<Project Path="src/modules/ShortcutGuide/ShortcutGuideModuleInterface/ShortcutGuideModuleInterface.vcxproj" Id="2d604c07-51fc-46bb-9eb7-75aecc7f5e81" />
<Folder Name="/modules/ShortcutGuide/">
<Project Path="src/modules/ShortcutGuide/ShortcutGuide.IndexYmlGenerator/ShortcutGuide.IndexYmlGenerator.csproj">
<Platform Solution="*|ARM64" Project="ARM64" />
<Platform Solution="*|x64" Project="x64" />
</Project>
<Project Path="src/modules/ShortcutGuide/ShortcutGuide.Ui/ShortcutGuide.Ui.csproj">
<Platform Solution="*|ARM64" Project="ARM64" />
<Platform Solution="*|x64" Project="x64" />
</Project>
<Project Path="src/modules/ShortcutGuide/ShortcutGuideModuleInterface/ShortcutGuideModuleInterface.vcxproj" Id="e487304a-b1fb-4e6b-8e70-014051af5b99" />
</Folder>
<Folder Name="/modules/Workspaces/">
<Project Path="src/modules/Workspaces/Workspaces.ModuleServices/Workspaces.ModuleServices.csproj">
Expand Down
Binary file removed doc/devdocs/images/shortcutguide/diagram.png
Binary file not shown.
104 changes: 61 additions & 43 deletions doc/devdocs/modules/shortcut_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@
[Pull Requests](https://github.com/microsoft/PowerToys/pulls?q=is%3Apr+is%3Aopen+label%3A%22Product-Shortcut+Guide%22+)

## Overview
Shortcut Guide is a PowerToy that displays an overlay of available keyboard shortcuts when the Windows key is pressed and held. It provides a visual reference for Windows key combinations, helping users discover and utilize built-in Windows shortcuts.
Shortcut Guide is a PowerToy that displays an overlay of available keyboard shortcuts when a user-set keyboard shortcut is pressed. It helps users discover and remember keyboard shortcuts for Windows and apps.

> [!NOTE]
> The spec for the manifest files is in development and will be linked here once available.

## Usage
- Press and hold the Windows key to display the overlay of available shortcuts
- Press the hotkey again to dismiss the overlay
- The overlay displays Windows shortcuts with their corresponding actions
- Press the user-defined hotkey to display the overlay
- Press the hotkey again or press ESC to dismiss the overlay

## Build and Debug Instructions

Expand All @@ -25,67 +27,83 @@ Shortcut Guide is a PowerToy that displays an overlay of available keyboard shor
4. The executable is named PowerToys.ShortcutGuide.exe

### Debug
1. Right-click the ShortcutGuide project and select 'Set as Startup Project'
1. Right-click the ShortcutGuide.Ui project and select 'Set as Startup Project'
2. Right-click the project again and select 'Debug'

## Code Structure
> [!NOTE]
> When run in debug mode, the window behaves differently than in release mode. It will not automatically close when loosing focus, it will be displayed on top of all other windows, and it is not hidden from the taskbar.

## Project Structure

The Shortcut Guide module consists of the following 4 projects:

### [`ShortcutGuide.Ui`](/src/modules/ShortcutGuide/ShortcutGuide.Ui/ShortcutGuide.Ui.csproj

This is the main UI project for the Shortcut Guide module. Upon startup it does the following tasks:

1. Copies the built-in manifest files to the users manifest directory (overwriting existing files).
2. Generate the `index.yml` manifest file.
3. Populate the PowerToys shortcut manifest with the user-defined shortcuts.
4. Starts the UI.

### [`ShortcutGuide.CPPProject`](/src/modules/ShortcutGuide/ShortcutGuide.CPPProject/ShortcutGuide.CPPProject.vcxproj)

This project exports certain functions to be used by the Shortcut Guide module, that were not able to be implemented in C#.

#### [`excluded_app.cpp`](/src/modules/ShortcutGuide/ShortcutGuide.CPPProject/excluded_app.cpp)

This file contains one function with the following signature:

![Diagram](../images/shortcutguide/diagram.png)
```cpp
__declspec(dllexport) bool IsCurrentWindowExcludedFromShortcutGuide()
```

### Core Files
This function checks if the current window is excluded from the Shortcut Guide overlay. It returns `true` if the current window is excluded otherwise it returns `false`.

#### [`dllmain.cpp`](/src/modules/shortcut_guide/dllmain.cpp)
Contains DLL boilerplate code. Implements the PowertoyModuleIface, including enable/disable functionality and GPO policy handling. Captures hotkey events and starts the PowerToys.ShortcutGuide.exe process to display the shortcut guide window.
#### [`tasklist_positions.cpp`](/src/modules/ShortcutGuide/ShortcutGuide.CPPProject/tasklist_positions.cpp)

#### [`shortcut_guide.cpp`](/src/modules/shortcut_guide/shortcut_guide.cpp)
Contains the module interface code. It initializes the settings values and the keyboard event listener. Defines the OverlayWindow class, which manages the overall logic and event handling for the PowerToys Shortcut Guide.
This file contains helper functions to retrieve the positions of the taskbar buttons. It exports the following function:

#### [`overlay_window.cpp`](/src/modules/shortcut_guide/overlay_window.cpp)
Contains the code for loading the SVGs, creating and rendering of the overlay window. Manages and displays overlay windows with SVG graphics through two main classes:
- D2DOverlaySVG: Handles loading, resizing, and manipulation of SVG graphics
- D2DOverlayWindow: Manages the display and behavior of the overlay window
```cpp
__declspec(dllexport) TasklistButton* get_buttons(HMONITOR monitor, int* size)
```

#### [`keyboard_state.cpp`](/src/modules/shortcut_guide/keyboard_state.cpp)
Contains helper methods for checking the current state of the keyboard.
This function retrieves the positions of the taskbar buttons for a given monitor. It returns an array of `TasklistButton` structures (max 10), which contain the position and size of each button.

#### [`target_state.cpp`](/src/modules/shortcut_guide/target_state.cpp)
State machine that handles the keyboard events. It's responsible for deciding when to show the overlay, when to suppress the Start menu (if the overlay is displayed long enough), etc. Handles state transitions and synchronization to ensure the overlay is shown or hidden appropriately based on user interactions.
`monitor` must be the monitor handle of the monitor containing the taskbar instance of which the buttons should be retrieved.

#### [`trace.cpp`](/src/modules/shortcut_guide/trace.cpp)
Contains code for telemetry.
`size` will contain the resulting array size.

### Supporting Files
It determines the positions through Windows `FindWindowEx` function.
For the primary taskbar it searches for:
* A window called "Shell_TrayWnd"
* that contains a window called "ReBarWindow32"
* that contains a window called "MSTaskSwWClass"
* that contains a window called "MSTaskListWClass"

#### [`animation.cpp`](/src/modules/shortcut_guide/animation.cpp)
Handles the timing and interpolation of animations. Calculates the current value of an animation based on elapsed time and a specified easing function.
For any secondary taskbar it searches for:
* A window called "Shell_SecondaryTrayWnd"
* that contains a window called "WorkerW"
* that contains a window called "MSTaskListWClass"

#### [`d2d_svg.cpp`](/src/modules/shortcut_guide/d2d_svg.cpp)
Provides functionality for loading, resizing, recoloring, rendering, and manipulating SVG images using Direct2D.
It then enumerates all the button elements inside "MSTaskListWClass" while skipping such with a same name (which implies the user does not use combining taskbar buttons)

#### [`d2d_text.cpp`](/src/modules/shortcut_guide/d2d_text.cpp)
Handles creation, resizing, alignment, and rendering of text using Direct2D and DirectWrite.
### [`ShortcutGuide.IndexYmlGenerator`](/src/modules/ShortcutGuide/ShortcutGuide.IndexYmlGenerator/)

#### [`d2d_window.cpp`](/src/modules/shortcut_guide/d2d_window.cpp)
Manages a window using Direct2D and Direct3D for rendering. Handles window creation, resizing, rendering, and destruction.
This application generates the `index.yml` manifest file.

#### [`native_event_waiter.cpp`](/src/modules/shortcut_guide/native_event_waiter.cpp)
Waits for a named event and executes a specified action when the event is triggered. Uses a separate thread to handle event waiting and action execution.
It is a separate project so that its code can be easier ported to WinGet in the future.

#### [`tasklist_positions.cpp`](/src/modules/shortcut_guide/tasklist_positions.cpp)
Handles retrieving and updating the positions and information of taskbar buttons in Windows.
### [`ShortcutGuideModuleInterface`](/src/modules/ShortcutGuide/ShortcutGuideModuleInterface/ShortcutGuideModuleInterface.vcxproj)

#### [`main.cpp`](/src/modules/shortcut_guide/main.cpp)
The entry point for the PowerToys Shortcut Guide application. Handles initialization, ensures single instance execution, manages parent process termination, creates and displays the overlay window, and runs the main event loop.
The module interface that handles opening and closing the user interface.

## Features and Limitations

- The overlay displays Windows shortcuts (Windows key combinations)
- The module supports localization, but only for the Windows controls on the left side of the overlay
- Currently the displayed shortcuts (Except the ones from PowerToys) are not localized.
- It's currently rated as a P3 (lower priority) module

## Future Development

A community-contributed version 2 is in development that will support:
- Application-specific shortcuts based on the active application
- Additional shortcuts beyond Windows key combinations
- PowerToys shortcuts
- Implementing with WinGet to get new shortcut manifest files
- Adding localization support for the built-in manifest files
Loading
Loading