Method to enumerate path to Windows 10 system settings screens or folders

file-shortcutshortcutswindows 10windows-explorer

I want to accomplish what this post entails, except personally I'm open to using more than one single input or keystroke to achieve it.

I'm aware that some (if not all) of the system windows can be invoked via directly calling upon their path, which can then be bound to a shortcut or even directly via run (which, then, makes it accessible for direct keybinding through various different methods, such as .ahk script or peripheral device's OEM softwares).

An example of this would be the Devices & Printers screen, which for some reason no longer populates in the Start menu search as an entry directly; thus, I had to lookup and create a shortcut for it:

%systemroot%\explorer.exe /e,::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{A8A91A66-3A7D-4424-8D24-04E180695C7A}

What I'd like to know is, how does one go about actually determining what that path address is? There may be various screens or functions I'd like to automate my access for (currently, Ease of Access Mouse Settings), and at present I can only look them each up individually case-by-case, and that's assuming one exists and has been posted online. I'd prefer to learn how to catch the proverbial fish myself, if that makes any sense.

Best Answer

For Control Panel items, if you don't really need the path but just want a shortcut, the easy way is:

Click in the Explorer Address Bar and type (or copy/paste): shell:::{ED7BA470-8E54-465E-825C-99712043E01C} to open the All Tasks folder, which list all the actions available: enter image description here Right-click any item & select Create Shortcut to create a shortcut on your Desktop.

The PowerShell way to list the System Folder names that (mostly) can be used with the Shell: protocol is:

(gp (gci HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions).PSPath).Name

And here's a recursive romp through the Control Panel Namespace:

$Shell = New-Object -ComObject shell.application
$DT = $Shell.Namespace(0)

Function Unfold ($oFolder) {
$oFolder.Items() | ?{ ($_.IsFolder -eq $True) -and ($_.Name -notLike 'Fonts') } | ForEach{
UnFold $_.GetFolder
$_.GetFolder.Items() | select Name, Path

$DT.Items() | ?{($_.IsFolder -eq $True) -and
        ($_.Name -match 'Control Panel')} | % {
            Unfold $_.GetFolder
} | Out-Gridview

For some reason, the paths don't seem to be working with the Shell: protocol. Needs further investigation.

enter image description here

Related Question