Following are some listings to be used as a quick reference to common Windows 7 Taskbar features using Windows API Code Pack.
Setting the process Application ID
Note: This should be done before the window is shown, a good place is on form load.
Setting the Application ID of a window
or in WPF:
Adding a file into the Recent category on the JumpList
Note: You must register (associate) the file type with your application for this to work.
Note 2: If you use the common dialogs to open a file it will get added automatically to the recent list.
Adding tasks to the JumpList
Arguments = arguments,
WorkingDirectory = workingDirectory
IJumpListTask separator = new JumpListSeparator();
IJumpListTask task2 = …
_jumpList.AddUserTasks(task1, separator, task2);
Adding custom categories
IJumpListItem item1 = new JumpListLink(path1, title1);
IJumpListItem item2 = new JumpListLink(path2, title2);
Creating Thumbnail Toolbars
button1.Click += delegate
Setting Overlay Icon
Setting Progress State and Value
TaskbarManager.Instance.SetProgressValue(currentValue, maximumValue, form.Handle);
Customizing Live Thumbnail
preview.TabbedThumbnailBitmapRequested += (o, e) =>
Bitmap bmp = new Bitmap(width, height);
// draw custom bitmap…
e.Handled = true;
A drawback in Windows API Code Pack v1.0.1
When using the Windows API Code Pack library to add Taskbar features to your WinForms application you must add a references to the following WPF DLLs: PresentationCore.dll, PresentationFramework and WindowsBase.dll
The reason is that every Taskbar function in the library that has an handle in its arguments comes in pair, the first expects a native IntPtr (used with myWinForm.Handle property) and the second expects a WPF Window object. Since we use a class that expects WPF types in its arguments (Taskbar) we must add the WPF DLLs to our WinForms project.
A Bug in Windows API Code Pack v1.0.1
ThumbnailToolbarButton Click event isn’t fired when process is running elevated (i.e. as Administrator)
The problem is that some of the taskbar messages doesn’t pass thru the Windows UIPI mechanism.
A quick fix is to add the following line to the load event:
The definition of this method is brought here:
[DllImport("user32.dll", EntryPoint = "RegisterWindowMessage", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern uint RegisterWindowMessage([MarshalAs(UnmanagedType.LPWStr)] string lpString);
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr ChangeWindowMessageFilter(uint message, uint dwFlag);
private const uint MSGFLT_ADD = 1;
private const uint WM_COMMAND = 0×0111;
private const uint WM_SYSCOMMAND = 0×112;
private const uint WM_ACTIVATE = 0×0006;
/// Specifies that the taskbar-related windows messages should
/// pass through the Windows UIPI mechanism even if the process is
/// running elevated. Calling this method is not required unless the
/// process is running elevated.
private static void AllowTaskbarWindowMessagesThroughUIPI()
uint WM_TaskbarButtonCreated = RegisterWindowMessage("TaskbarButtonCreated");
#endregion Fix bug in Windows API Code Pack
That’s it for now,