/* Adds a saved session to the Windows 7 jumplist. */ void add_session_to_jumplist(const char * const sessionname) { if (add_to_jumplist_registry(sessionname) == JUMPLISTREG_OK) { update_jumplist_from_registry(); } else { /* Make sure we don't leave the jumplist dangling. */ clear_jumplist(); } }
/* Removes a saved session from the Windows jumplist. */ void remove_session_from_jumplist(const char * const sessionname) { if ((osMajorVersion < 6) || (osMajorVersion == 6 && osMinorVersion < 1)) return; /* do nothing on pre-Win7 systems */ if (remove_from_jumplist_registry(sessionname) == JUMPLISTREG_OK) { update_jumplist_from_registry(); } else { /* Make sure we don't leave the jumplist dangling. */ clear_jumplist(); } }
HRESULT setup_jumplist(wstring appid, int n, wstring titles[], wstring cmds[], wstring icons[], int ii[]) { OSVERSIONINFO ver; ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&ver); //printf("setup_jumplist\n"); // if running under the machine older than Windows 7, silently return. if (!((ver.dwMajorVersion == 6 && ver.dwMinorVersion >= 1) || ver.dwMajorVersion >= 7)) { return S_OK; } HRESULT hr = S_OK; hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if (FAILED(hr)) return hr; hr = clear_jumplist(); hr = S_OK; if (SUCCEEDED(hr)) { IObjectCollection * pobjs = init_jumplist(); //printf("setup_jumplist items %p\n", pobjs); if (pobjs) { for (int i = 0; i < n; ++i) { hr = register_task(pobjs, titles[i], cmds[i], icons[i], ii[i]); if (FAILED(hr)) { break; } } if (SUCCEEDED(hr)) hr = create_jumplist(appid, pobjs); pobjs->lpVtbl->Release((void *)pobjs); } } CoUninitialize(); return hr; }