Editing The Start Menu Apps


  1. Posts : 132
    windows 10
       #1

    Editing The Start Menu Apps


    Just a quick solution here rather than a question!

    I have a number of small system apps that don't have an install, so normally I would just create folders and menus in the Start Menu Apps folder -

    C:\ProgramData\Microsoft\Windows\Start Menu\Programs

    But Windows 10 won't allow you to create shortcuts in that folder any more. I have no idea why. Microsoft being dictatorial again, I suppose, but luckily the the solution is really simple. It will allow you to "copy" shortcuts, so you need to create your shortcuts on the desktop and then just copy them in one by one.
      My Computer


  2. Posts : 9
    Windows 10
       #2

    Dear davefaz

    davefaz said:
    Just a quick solution here rather than a question!

    I have a number of small system apps that don't have an install, so normally I would just create folders and menus in the Start Menu Apps folder -

    C:\ProgramData\Microsoft\Windows\Start Menu\Programs

    But Windows 10 won't allow you to create shortcuts in that folder any more. I have no idea why. Microsoft being dictatorial again, I suppose, but luckily the the solution is really simple. It will allow you to "copy" shortcuts, so you need to create your shortcuts on the desktop and then just copy them in one by one.
    Just add your User and give him permissions to C:\ProgramData\Microsoft\Windows\Start Menu\Programs via Right Click on folder Programs, then Properties and choose Security tab and add there your User with Full Control at Allow tab.

    Sincerely
      My Computer


  3. Posts : 5,478
    2004
       #3

    davefaz said:
    Windows 10 won't allow you to create shortcuts in that folder any more. .
    Absolutely not true. You definitely can make shortcuts in that folder. Have a look below for some examples.

    Every clean install of Windows 10 I run this PoSh script which creates shortcuts in that folder and set the "run as administrator" flag as required on the shortcuts I want.

    If you think you can't make shortcuts in Windows 10 then you are simply wrong.

    Code:
    # Shortcuts will be created in $ShortcutRoot for programs found in $ExeRoot (except for $Exclusions)
    $ExeRoot="C:\Users\Hali\OneDrive\Programs\"
    $ShortcutRoot=$Home + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\"
    $Exclusions = @("gdisk64","nvspbind","StartKiller","UnlockerInject32")
    
    $PoShExeRoot="C:\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="C:\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")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
    	}
    }
    
    )	
    $options = @($i=0;$#----------------------------------------------------------------
    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') {
                    c
                } 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"


    Perhaps that script is a bit long winded so here you are - a simple Powershell example:
    Code:
    $WshShell=New-Object -ComObject WScript.Shell
    $Shortcut=$WshShell.CreateShortcut("C:\ProgramData\Microsoft\Windows\Start Menu\Programs\WhatEverYouWant.lnk")
    $Shortcut.Targetpath= "C:\Windows\wordpad.exe"
    $Shortcut.Save()

    With that you will find searching for "WhatEverYourWant" opens "wordpad.exe". It can be quite useful if you tweek it (especially the first box) as Windows search doesn't find all .exe any more since Windows 8.1. That is an irritating change that MS don't want to revert though.
    Last edited by lx07; 08 Sep 2016 at 06:36. Reason: A simpler example
      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 03:09.
Find Us




Windows 10 Forums