private void AppendCustomCategories() { // Initialize our current index in the custom categories list int currentIndex = 0; // Keep track whether we add the Known Categories to our list bool knownCategoriesAdded = false; if (customCategoriesCollection != null) { // Append each category to list foreach (JumpListCustomCategory category in customCategoriesCollection) { // If our current index is same as the KnownCategory OrdinalPosition, // append the Known Categories if (!knownCategoriesAdded && currentIndex == KnownCategoryOrdinalPosition) { AppendKnownCategories(); knownCategoriesAdded = true; } // Don't process empty categories if (category.JumpListItems.Count == 0) { continue; } IObjectCollection categoryContent = (IObjectCollection) new CEnumerableObjectCollection(); // Add each link's shell representation to the object array foreach (IJumpListItem link in category.JumpListItems) { JumpListItem listItem = link as JumpListItem; JumpListLink listLink = link as JumpListLink; if (listItem != null) { categoryContent.AddObject(listItem.NativeShellItem); } else if (listLink != null) { categoryContent.AddObject(listLink.NativeShellLink); } } // Add current category to destination list HResult hr = customDestinationList.AppendCategory( category.Name, (IObjectArray)categoryContent); if (!CoreErrorHelper.Succeeded(hr)) { if ((uint)hr == 0x80040F03) { throw new InvalidOperationException(LocalizedMessages.JumpListFileTypeNotRegistered); } else if ((uint)hr == 0x80070005 /*E_ACCESSDENIED*/) { // If the recent documents tracking is turned off by the user, // custom categories or items to an existing category cannot be added. // The recent documents tracking can be changed via: // 1. Group Policy “Do not keep history of recently opened documents”. // 2. Via the user setting “Store and display recently opened items in // the Start menu and the taskbar” in the Start menu property dialog. // throw new UnauthorizedAccessException(LocalizedMessages.JumpListCustomCategoriesDisabled); } throw new ShellException(hr); } // Increase our current index currentIndex++; } } // If the ordinal position was out of range, append the Known Categories // at the end if (!knownCategoriesAdded) { AppendKnownCategories(); } }
//The following method is part of the lab. Ensure that the filename is valid, //and if it is -- create a new item and add it to the current category, and refresh //the jump list. private void createCategoryItem_Click(object sender, RoutedEventArgs e) { //TODO: Task 6--Using Taskbar Jump Lists, steps 26-31 if (!CheckFileName(txtCategoryItem.Text)) return; JumpListItem jli = new JumpListItem(GetTempFileName(txtCategoryItem.Text)); _currentCategory.AddJumpListItems(jli); JumpList.Refresh(); }