Hi, I've just started using ahk and I just wanted to contribute something back since I've been using alot of scripts from others here.
This is a simple library to use the Jump List feature in Windows 7. This requires AHK_L, the latest version with support for super-global variables, and works with both 32 bit and 64 bit OS. Jump lists require instantiating various Shell COM objects, so this is mostly just a bunch of simple class wrappers for those. Download the lib here:
Library: https://ahknet.autoh...MG/JumpList.ahk
Here is a quick demo script:

#include JumpList.ahk szAppID:="customappid" DllCall("Shell32.dll\SetCurrentProcessExplicitAppUserModelID", str, szAppID) ; create a ShellLink object for Notepad shelllink1 := new ShellLink() shelllink1.SetPath("c:\\windows\\notepad.exe") shelllink1.SetIconLocation("c:\\windows\\notepad.exe", 0) shelllink1.SetDescription("launches notepad") InitVariantFromString("Notepad", vt) shelllink1.SetValue(PKEY_Title,vt) shelllink1.Commit() ; create a ShellLink object for Regedit shelllink2 := new ShellLink() shelllink2.SetPath("c:\\windows\\regedit.exe") shelllink2.SetIconLocation("c:\\windows\\regedit.exe", 0) shelllink2.SetDescription("launches regedit") InitVariantFromString("Regedit", vt) shelllink2.SetValue(PKEY_Title,vt) shelllink2.Commit() ; create a ShellLink object for a task list seperator shelllinkseperator := new ShellLink() InitVariantFromBoolean(-1, vtbool) shelllinkseperator.SetValue(PKEY_AppUserModel_IsDestListSeparator,vtbool) shelllinkseperator.Commit() ; create an ObjectCollection object to represent our User Tasks category enumerableobjectcollection1 := new EnumerableObjectCollection() enumerableobjectcollection1.AddObject(shelllink1.pShellLinkW) enumerableobjectcollection1.AddObject(shelllinkseperator.pShellLinkW) enumerableobjectcollection1.AddObject(shelllink2.pShellLinkW) ; create an ObjectCollection object to represent our Custom Category enumerableobjectcollection2 := new EnumerableObjectCollection() enumerableobjectcollection2.AddObject(shelllink1.pShellLinkW) enumerableobjectcollection2.AddObject(shelllink2.pShellLinkW) ; create a DestinationList object to represent the complete Jump List destinationlist1:= new DestinationList() destinationlist1.SetAppId(szAppID) destinationlist1.BeginList(minslots,premovedlist) destinationlist1.AddUserTasks(enumerableobjectcollection1.pObjectCollection) destinationlist1.AppendCategory("My Custom Category",enumerableobjectcollection2.pObjectCollection) destinationlist1.CommitList() ; create a main window, which will assume the appid we specified for the current process Gui, +LastFound hwnd := WinExist() Gui, Show, w300 h300 hdc := DllCall("GetDC", ptr, hwnd) DllCall("gdi32.dll\TextOut", ptr, hdc, int, 30, int, 60, str, "Right-click taskbar to see the jumplist", uint, 40) return GuiClose: ExitApp
Basic Overview
ShellLink objects: All jumplist items are represented by ShellLink objects. So start by creating a bunch of ShellLinks for whatever programs or folders you wish.
EnumerableObjectCollection objects: The Windows 7 Jumplist is structured in "categories". Each category is represented by an EnumerableObjectCollection object. So create one for each section you desire. Then add your ShellLinks into these collection objects. You can create custom categories and name it whatever you want. But Microsoft also predefines a category called "Tasks". The only real special thing about this category is that you can insert divders between task items. A divider is just a ShellLink object with a predefined property "PKEY_AppUserModel_IsDestListSeparator" set to True.
DestinationList object: The Jumplist itself is represented by a single DestinationList object. Instantiate one of these, and then add in each of your categories. To append a custom category call "AppendCategory()". To append a Tasks category, call "AddUserTasks().
How to get the jumplist to show? Windows associates Jumplists with taskbar buttons whenever they have the same "AppID" (you can choose any string name for this). To set the AppID for your program, use win32's SetCurrentProcessExplicitAppUserModelID(). Then any windows (and hence taskbar buttons) spawned afterwards will have that AppID. When you create your DestinationList jumplist object, set it to the same appid with SetAppID(). Finally, call the DestinationList object's CommitList() function when you're done adding everything to your jumplist.
Since I'm new to ahk, there could be bugs or better ways of using ahk's features, but I hope that someone finds this helpful, if anything at least as a reference. And feel free to modify this any way you see fit. Enjoy.