Custom (XP-like) QuickLaunch






4.33/5 (2 votes)
An easy implementation of the taskbar-independent "quick launch"
Introduction
In times of Windows XP I liked having my desktop just for the data I worked with and my application launchers (lots of them) separately at the right side of the screen.
Since Windows Vista (AFAIK), there is no way how to drag the "quick launch" out of the taskbar and drop it elsewhere. First, I tried to search for any freeware/shareware that would simulate the XP "quick launch" behaviour. I haven't found anything similar (just taskbar-bound gadgets or floating panels with animations which I didn't like). So I decided to write one. I don't include a complete downloadable application, just a framework how to create it in a very easy way.
Using the code
- Sort your desktop icons according to the type and move the shortcuts (.lnk files) to a folder (e.g., C:\Users\John Doe\Documents\Panel).
- Create Windows forms application. I suggest these Form1 properties:
- Drop a
ListView
onto a form and dock it to fill it. I suggest theselistView1
properties: - Switch to the code. Put this code into the constructor of the Form1.
- Implement some more methods/handlers.
- Compile the application and put the executable to your Startup folder. Log off, log on and enjoy!
FormBorderStyle = FixedToolWindow
StartPosition = Manual
MaximizeBox = False
MinimizeBox = False
ShowInTaskbar = False
Set the Text
, Size
, and
Location
according to your needs.
HeaderStyle = None
Dock = Fill
HoverSelection = True
HotTracking = True
Activation = OneClick
Set the BackColor
, Font
, and
ForeColor
according to your needs.
public Form1()
{
InitializeComponent();
// needed for displaying View.Details
listView1.Columns.Add("Shortcut", -2);
// get collection of the shortcut paths
string[] files = Directory.GetFiles(@"C:\Users\John Doe\Documents\Panel");
ImageList ilSmall = new ImageList();
// extract the shorcut icons
foreach (string fp in files)
{
ilSmall.Images.Add(IconFromFilePath(fp));
}
listView1.SmallImageList = ilSmall;
listView1.View = View.Details;
int iIdx = 0;
// feed the listView1
foreach (string file in files)
{
// display just the filename
string fileName = Path.GetFileNameWithoutExtension(file);
ListViewItem item = new ListViewItem(fileName);
// store the complete path
item.Tag = file;
listView1.Items.Add(item);
// set the index of the icon
item.ImageIndex = iIdx++;
}
}
/// <summary>
/// Extracts the shell icon of the executable, shortcut, document...
/// </summary>
/// <param name="filePath">Path</param>
/// <returns>An Icon instance</returns>
private Icon IconFromFilePath(string filePath)
{
Icon result = null;
try
{
result = Icon.ExtractAssociatedIcon(filePath);
}
catch { }
return result;
}
/// <summary>
/// Prevent the window from unwanted closing
/// (Form1 FormClosing event handler)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Really quit?", "Confirm",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) !=
System.Windows.Forms.DialogResult.Yes)
e.Cancel = true;
}
/// <summary>
/// Launch the shortcut (or executable, document...)
/// (listView1 ItemActivate event handler)
/// (the same code can handle listView1 DoubleClick event, if preferred)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listView1_ItemActivate(object sender, EventArgs e)
{
ListViewItem lvi = listView1.SelectedItems[0];
Process proc = new Process();
// If the application does not start, check the shortcut.
// There could be Program Files (x86) issue, the incorrect executable path set.
try
{
// extract the stored file path
proc.StartInfo.FileName = (string)lvi.Tag;
proc.Start();
}
catch { }
}