Start menu not in alphabetical order


  1. Posts : 1
    Windows 10
       #1

    Start menu not in alphabetical order


    Hello,

    I normally organize and rename the shortcuts in the start menu (in the folder ...\ProgramData\Microsoft\Windows\Start Menu) to shorter or more memorable names. However, my start menu is not in alphabetical order anymore.

    For example: I've renamed "Adobe Photoshop CC 2015" to "Photoshop" and "Adobe Premiere Pro CC 2015" to "Premiere". So, I expect that the programs would be listed under "P" in my start menu, but, they're still on top of my menu, renamed, under the "A" letter.

    This process has always worked, until now. Is there something I can do to fix it?

    Thank you in advance,
      My Computer


  2. Posts : 42,992
    Win 10 Pro (22H2) (2nd PC is 22H2)
       #2

    Hi, I think the problem is that the Win 10 start menu does not behave in the same way as traditional start menus in respect of legacy folder-based menus we're used to.

    Many of my 'normal' entries in my start menu aren't even present in the Win 10 start menu. Subfolders (E.g. the folder created by a program I install containing its shortcuts) aren't even shown in the Win 10 start menu.. all the shortcuts under one letter in the start menu are linear- extracted from their folders producing this sort of absurdity:
    Start menu not in alphabetical order-untitled.png

    That's why I use Classic Shell- which works as I expect.
      My Computers


  3. Posts : 5,478
    2004
       #3

    What I do is create shortcuts with the name I want. These then show up normally in the start menu, sorted correctly and with the name I chose.

    What I found is that you need to put the shortcuts in C:\Users\<your name>\AppData\Roaming\Microsoft\Windows\Start Menu rather than in %programdata% directory. I'm not sure why as either should work but for me (since 10586) only the user account seems to work.

    Just putting programs in the start definitely does not work on Windows 10 - you need shortcuts for sure.

    If you are interested I use this script to create the requied shortcuts.

    You don't need it all but perhaps you can see what I'm doing here - it will create shortcuts for all programs and powershell scripts (running them as admin if required) and stick them in your start menu.

    It is a bit annoying to have to do this (and I guess I could use another start menu program instead) but I just like to do things myself sometimes so I know why things are showing up.

    Code:
    # Shortcuts will be created in $ShortcutRoot for programs found in $ExeRoot (except for $Exclusions)
    $ExeRoot="D:\Users\Hali\OneDrive\Programs\"
    $ShortcutRoot=$Home + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\"
    $Exclusions = @("gdisk64","nvspbind","StartKiller","UnlockerInject32")
    
    $PoShExeRoot="D:\Users\Hali\OneDrive\Programs\Powershell Scripts\"
    $PoShShortcutRoot=$Home + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Powershell Scripts\"
    $PoShExclusions = @("Sleep Mac Transmission","Wake Mac Transmission","WakeTransmission")
    
    $SysinternalsExeRoot="D:\Users\Hali\OneDrive\Programs\SysinternalsSuite\"
    $SysinternalsShortcutRoot=$Home + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\SysinternalsSuite\"
    $SysinternalsExclusions = @(
    "accesschk","autorunsc","adrestore","Clockres","Contig","CoreInfo","ctrl2cap","diskext","du","efsdump","FindLinks","handle","hex2dec","junction","ldmdump","listdlls",
    "livekd","logonsessions","movefile","ntfsinfo","pendmoves","pipelist","procdump","PsExec","psfile","PsGetSid","PsInfo","pskill","pslist","PsLoggedon","psloglist","pspasswd",
    "psping","PsService","psshutdown","pssuspend","RegDelNull","regjump","RootkitRevealer","ru","sdelete","sigcheck","streams","strings","sysmon","sync","VolumeID","Whois")
    #----------------------------------------------------------------
    # Check set-up
    #----------------------------------------------------------------
    Write-Host "Shortcuts will be created in " -NoNewline; Write-Host $ShortcutRoot -f White
    Write-Host "for programs found in " -NoNewline; Write-Host $ExeRoot -NoNewline -f White; Write-Host " and " -NoNewline; Write-Host $SysinternalsExeRoot -f White
    
    $title="Keep folder structure for shortcuts?"
    $message="Enter choice"
    $choices = @(
    	@("Yes", "Keep existing structure"),
    	@("No",  "Create Shortcuts in root directory"),
    	@("Exit","Exit")
    )	
    $options = @($i=0;$choices |
    	%{New-Object System.Management.Automation.Host.ChoiceDescription "&$i`b$($_[0])", $_[1]; $i++})
    $result = $host.ui.PromptForChoice($title, $message, $options, 1)
    $choice = $choices[$result][0]
    
    Switch ($result)
    {	0 {$Consolidate=$False}
    	1 {$Consolidate=$True}
    	2 {exit}
    }
    #----------------------------------------------------------------
    Function Set-Admin 
    #----------------------------------------------------------------
    # Set the Run As Administrator flag
    
    ($file) {
    	if (-not (Test-Path $file)) { Write-Host "File not found                                   " -NoNewline -f red; Write-Host "$file" -f red }
    	else {
    		$bytes = [System.IO.File]::ReadAllBytes($file)
    		$bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON (Use –bor to set RunAsAdministrator option and –bxor to unset)
    		[System.IO.File]::WriteAllBytes($file, $bytes)
    		Write-Host "Administrator authority granted                  " -NoNewline -f green; Write-Host "$file" -f White
    	}
    }
    #----------------------------------------------------------------
    Function Create-Shortcuts 
    #---------------------------------------------------------------
    # Create shortcuts for all non-excluded .exe
    
    ($ExeRoot,$ShortcutRoot,$Exclusions,$Consolidate,$Recurse) {
    	# Get all program objects
    	if ($Recurse) {$Apps=Get-ChildItem -path $ExeRoot -include @("*.exe","*.ps1") -recurse}
    	else {$Apps=Get-ChildItem -path "$ExeRoot*" -include @("*.exe","*.ps1")}
    
    	Foreach ($App in $Apps) {
    		$ShortcutName=[io.path]::GetFileNameWithoutExtension($App.FullName)+'.lnk'
            $IconPath=(Split-Path $App.FullName -parent)+"\"+[io.path]::GetFileNameWithoutExtension($App.FullName)+'.ico'	
    		if ($consolidate) { 
    			$ShortcutPath=$ShortcutRoot+$ShortcutName
    					
    		} else { 
    			$ShortcutPath=([io.path]::ChangeExtension($ShortcutRoot + $App.FullName.SubString($ExeRoot.Length), '.lnk'))
    		}
    
    		if (Test-Path $ShortcutPath) { Write-Host "Shortcut exists                                  " -NoNewline -f cyan; Write-Host "$ShortcutPath" -f white }
    		elseif ($Exclusions -contains $App.BaseName) { Write-Host " excluded                                        " -NoNewline -f red; Write-Host "$App" -f red }
    		else {
    			# Create directory if required
    			$ShortcutDirectory = Split-Path $ShortcutPath -parent
    			if (-not (Test-Path $ShortcutDirectory )) { New-Item -ItemType Directory -Path $ShortcutDirectory -Force }
    
    			# Create Shortcut
    			$WshShell=New-Object -ComObject WScript.Shell
    			$Shortcut=$WshShell.CreateShortcut($ShortcutPath)
    
    			If([io.path]::GetExtension($App.FullName) -eq '.exe') {
                    $Shortcut.TargetPath = $App.FullName
                } Else {
                    $Shortcut.TargetPath ='%systemroot%\system32\WindowsPowerShell\v1.0\powershell.exe'
                    $Shortcut.Arguments = '-ExecutionPolicy Bypass -File "'+$App.FullName+'"'
                }
    
    			if (Test-Path $IconPath) {$Shortcut.IconLocation = $IconPath}
    			
    			$Shortcut.WorkingDirectory = Split-Path $App.FullName -parent
    			$Shortcut.Save()
    
    			Write-Host "Shortcut created                                 " -NoNewline -f green; Write-Host $ShortcutPath -f White
    
    			# Make Powershell shortcuts run as administrator			
    			If([io.path]::GetExtension($App.FullName) -eq '.ps1') {Set-Admin $ShortcutPath}
    		}
    	}
    }
    Write-Host "EXEs Processed" -f Yellow; Write-Host
    #----------------------------------------------------------------
    # Sysinternals Programs
    #----------------------------------------------------------------
    Create-Shortcuts $SysinternalsExeRoot $SysinternalsShortcutRoot $SysinternalsExclusions $True $False
    
    # sync.exe (want to add icon)
    $WshShell=New-Object -ComObject WScript.Shell
    $Shortcut=$WshShell.CreateShortcut("$SysinternalsShortcutRoot\sync.lnk")
    $Shortcut.TargetPath = "$SysinternalsExeRoot\sync.exe"
    $Shortcut.WorkingDirectory = "$SysinternalsExeRoot"
    $Shortcut.IconLocation = "%SystemRoot%\system32\shell32.dll,217" # (54 accross *4 deep + 1 down = 217 in the dll)
    $Shortcut.Save()
    Write-Host "Shortcut created                                 " -NoNewline -f green; Write-Host $SysinternalsShortcutRoot"sync.lnk" -f White
    
    # Set various shortcuts to run as Admin
    Set-Admin "$SysinternalsShortcutRoot`Autoruns.lnk"
    Set-Admin "$SysinternalsShortcutRoot`procexp.lnk"
    Set-Admin "$SysinternalsShortcutRoot`Procmon.lnk"
    Set-Admin "$SysinternalsShortcutRoot`sync.lnk"
    #----------------------------------------------------------------
    # Powershell scripts
    #----------------------------------------------------------------
    Create-Shortcuts $PoShExeRoot $PoShShortcutRoot $PoShExclusions $True $True
    #----------------------------------------------------------------
    # Other Programs
    #----------------------------------------------------------------
    # Get Programs in root
    Create-Shortcuts $ExeRoot $ShortcutRoot $Exclusions $True $False
    
    # Get programs in sub-directories (except Sysinternals)
    $OtherDirs = Get-ChildItem -path $ExeRoot -dir -exclude "SysinternalsSuite","Powershell Scripts"
    $SavedShortcutRoot=$ShortcutRoot
    $SavedExeRoot=$ExeRoot
    
    Foreach ($OtherDir in $OtherDirs) {
    	$ExeRoot=$OtherDir.FullName+"\"
    	if (-not $Consolidate) { $ShortcutRoot=$SavedShortcutRoot+$OtherDir.Name+"\" }
    	Create-Shortcuts $ExeRoot $ShortcutRoot $Exclusions $Consolidate $True
    }
    $ShortcutRoot=$SavedShortcutRoot
    $ExeRoot=$SavedExeRoot
    
    # Set various shortcuts to run as Admin
    Set-Admin "$ShortcutRoot`windirstat.lnk"
    Set-Admin "$ShortcutRoot`TreeSizeFree.lnk"
    
    #----------------------------------------------------------------
    # Other Shortcuts
    #----------------------------------------------------------------
    $WshShell = New-Object -ComObject WScript.Shell
    $Shortcut=$WshShell.CreateShortcut("$ShortcutRoot\God Mode.lnk")
    $Shortcut.TargetPath = $Shortcut.TargetPath = "$env:systemroot\explorer.exe"
    $Shortcut.Arguments = "shell:::{ED7BA470-8E54-465E-825C-99712043E01C}"
    $Shortcut.Save()
    Write-Host "Shortcut created                                 " -NoNewline -f green; Write-Host $ShortcutRoot"God Mode.lnk" -f White
    
    if (-not(Test-Path "$ShortcutRoot\TN5250")) {New-Item -ItemType Directory -Path "$ShortcutRoot\TN5250" -Force}
    Copy-Item $ExeRoot\TN5250\PUB1.lnk $ShortcutRoot\TN5250\
    Copy-Item $ExeRoot\TN5250\SIASDEV.lnk $ShortcutRoot\TN5250\
    Move-Item $ShortcutRoot\TN5250.lnk $ShortcutRoot\TN5250\
    #----------------------------------------------------------------
    # Rename any odd named
    #----------------------------------------------------------------
    if (Test-Path "$ShortcutRoot\TFC.lnk") {Rename-Item "$ShortcutRoot\TFC.lnk" "$ShortcutRoot\Temp File Cleaner.lnk"} 
    if (Test-Path "$ShortcutRoot\Rapr.lnk") {Rename-Item "$ShortcutRoot\Rapr.lnk" "$ShortcutRoot\Driver Store Explorer.lnk"}
    
    Write-Host
    Read-Host -Prompt "Press Enter to exit"
      My Computer


 

  Related Discussions
Our Sites
Site Links
About Us
Windows 10 Forums is an independent web site and has not been authorized, sponsored, or otherwise approved by Microsoft Corporation. "Windows 10" and related materials are trademarks of Microsoft Corp.

© Designer Media Ltd
All times are GMT -5. The time now is 02:22.
Find Us




Windows 10 Forums