Show Desktop Shortcuts using AutoHotkey
Have you ever wanted to be able to open a shortcut on your Windows desktop without minimizing the programs you have running. Well, with AutoHotkey it's easy. Here is a script that allows you to do just that. You don't even need AutoHotkey to run it; here is the executable compiled from that script.

If you have AutoHotkey installed (come on, all the cool kids are doing it), then just right click on the script and select "Run Script"; otherwise, double click on the executable. When the script is running an icon will appear in your system tray. Then, all you need to do to bring up the "Show Desktop Shortcuts" window is press "Windows Key-Space Bar". This will show you a list of your desktop shortcuts. Either double clicking on a selection, or pressing Enter when your desired shortcut is highlighted will launch the shortcut. You can navigate with the arrow keys or by pressing the first letter of the shortcut (repeated pressing of the letter will cycle through all the shortcuts with that first letter). You can right-click on the icon in your system tray and select "Exit" if you no longer want the script to be running. Additionally, if you want the script to run every time Windows starts, just copy it to the Startup folder. It's as easy as that!
AutoHotkey can do a lot more than this. The script that I have in my Startup folder keeps growing in size as I find more and more ways to make Windows more efficient with AutoHotkey.
Below is the source code of the AutoHotkey script:
; AutoHotkey Version: 1.x
; Author: Scott Updike scottupdike@gamesbyageek.com http://www.gamesbyageek.com
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#space::
LoopNum := 0
Loop, %A_Desktop%\*.lnk
{
; check extension length
if StrLen(A_LoopFileName) + 1 - InStr(A_LoopFileName, "lnk", StartingPos = 0) = 3
{
LoopNum++
}
}
Loop, %A_DesktopCommon%\*.lnk
{
; check extension length
if StrLen(A_LoopFileName) + 1 - InStr(A_LoopFileName, "lnk", StartingPos = 0) = 3
{
LoopNum++
}
}
LoopNum++
if LoopNum > 40
{
LoopNum := 40
}
Gui, Add, ListView, List r%LoopNum% w200 gMyListView, shortcut|hidden
Gui, Add, Button, Hidden Default, OK
ImageListID := IL_Create(10)
LV_SetImageList(ImageListID) ; Assign the above ImageList to the current ListView.
Loop, %A_Desktop%\*.lnk
{
; check extension length
if StrLen(A_LoopFileName) + 1 - InStr(A_LoopFileName, "lnk", StartingPos = 0) = 3
{
LNKFile := A_Desktop . "\" . A_LoopFileName
FileGetShortcut, %LNKFile%, OutTarget, OutDir, OutArgs, OutDesc, OutIcon, OutIconNum, OutRunState
ILOut := IL_Add(ImageListID, OutIcon, OutIconNum)
if ILOut = 0
{
ILOut := IL_Add(ImageListID, OutTarget)
}
if ILOut = 0
{
if OutTarget =
ILOut := IL_Add(ImageListID, "SHELL32.dll", 1)
}
if ILOut = 0
{
StringGetPos, CharPos, OutTarget, \, R1
StringRight, FileName, OutTarget, StrLen(OutTarget) - CharPos - 1
IfInString, FileName, .
{
; period found so use generic icon
IL_Add(ImageListID, "SHELL32.dll", 1)
}
else
{
; no period so use folder icon
IL_Add(ImageListID, "SHELL32.dll", 4)
}
}
}
}
Loop, %A_DesktopCommon%\*.lnk
{
; check extension length
if StrLen(A_LoopFileName) + 1 - InStr(A_LoopFileName, "lnk", StartingPos = 0) = 3
{
LNKFile := A_DesktopCommon . "\" . A_LoopFileName
FileGetShortcut, %LNKFile%, OutTarget, OutDir, OutArgs, OutDesc, OutIcon, OutIconNum, OutRunState
ILOut := IL_Add(ImageListID, OutIcon, OutIconNum)
if ILOut = 0
{
ILOut := IL_Add(ImageListID, OutTarget)
}
if ILOut = 0
{
if OutTarget =
ILOut := IL_Add(ImageListID, "SHELL32.dll", 1)
}
if ILOut = 0
{
StringGetPos, CharPos, OutTarget, \, R1
StringRight, FileName, OutTarget, StrLen(OutTarget) - CharPos - 1
IfInString, FileName, .
{
; period found so use generic icon
IL_Add(ImageListID, "SHELL32.dll", 1)
}
else
{
; no period so use folder icon
IL_Add(ImageListID, "SHELL32.dll", 4)
}
}
}
}
LoopNum := 0
Loop, %A_Desktop%\*.lnk
{
; check extension length
if StrLen(A_LoopFileName) + 1 - InStr(A_LoopFileName, "lnk", StartingPos = 0) = 3
{
LoopNum++
LV_Add("Icon" . LoopNum, SubStr(A_LoopFileName, 1, InStr(A_LoopFileName, ".lnk", StartingPos = 0) - 1), 1)
}
}
Loop, %A_DesktopCommon%\*.lnk
{
; check extension length
if StrLen(A_LoopFileName) + 1 - InStr(A_LoopFileName, "lnk", StartingPos = 0) = 3
{
LoopNum++
LV_Add("Icon" . LoopNum, SubStr(A_LoopFileName, 1, InStr(A_LoopFileName, ".lnk", StartingPos = 0) - 1), 2)
}
}
LV_ModifyCol(1, "Sort")
; Display the window and return. The script will be notified whenever the user double clicks a row.
Gui, Show,, Desktop Shortcuts
return
MyListView:
if A_GuiEvent = DoubleClick
{
LV_GetText(RowText, A_EventInfo) ; Get the text from the row's first field.
LV_GetText(RowText2, A_EventInfo, 2)
if RowText2 = 1
Run "%A_Desktop%\%RowText%.lnk"
else
Run "%A_DesktopCommon%\%RowText%.lnk"
Gui, Destroy
}
return
ButtonOK:
RowNum := LV_GetNext(0, "Focused")
if RowNum = 0
return
LV_GetText(RowText, RowNum) ; Get the text from the row's first field.
LV_GetText(RowText2, RowNum, 2)
if RowText2 = 1
Run "%A_Desktop%\%RowText%.lnk"
else
Run "%A_DesktopCommon%\%RowText%.lnk"
Gui, Destroy
return
return
GuiClose:
GuiEscape:
Gui, Destroy
return
This works on my versions of XP and Vista. Let me know if you have any problems.