bool InstallProgramGroup(const char *exe, const char *groupname, const char *lnk, int icon) { String dir = GetShellFolder("Common Programs", HKEY_LOCAL_MACHINE); if(groupname) { dir = AppendFileName(dir, groupname); CreateDirectory(dir, NULL); } return CreateShellLink(exe, AppendFileName(dir, lnk), "", icon); }
LPSHELLFOLDER COXShellNamespaceNavigator:: GetParentShellFolder(LPCITEMIDLIST pidlFull, LPITEMIDLIST* lppRelativeIDL) const { ASSERT(lppRelativeIDL!=NULL); if(pidlFull==NULL) { // Retrieve the Desktop's IShellFolder interface. LPSHELLFOLDER lpDesktopFolder; if(FAILED(SHGetDesktopFolder(&lpDesktopFolder))) return NULL; ASSERT(lpDesktopFolder!=NULL); if(lpDesktopFolder!=NULL) m_mapIShellFolderToRelease.SetAt((DWORD_PTR)lpDesktopFolder,NULL); return lpDesktopFolder; } UINT cbTotal=0; LPITEMIDLIST pidlTemp=(LPITEMIDLIST)pidlFull; // add the size of the NULL terminating mkid.cb - !!!!2 bytes!!!! cbTotal+=sizeof(pidlTemp->mkid.cb); while(pidlTemp && pidlTemp->mkid.cb) { LPITEMIDLIST pidlLast=pidlTemp; UINT cb=pidlTemp->mkid.cb; cbTotal+=cb; pidlTemp=GetNextIDLItem(pidlTemp); if(pidlTemp==NULL) { cbTotal-=cb; *lppRelativeIDL=CopyPIDL(pidlLast); } } LPITEMIDLIST pidlTarget=(LPITEMIDLIST)m_pMalloc->Alloc(cbTotal); if(!pidlTarget) return (NULL); ::memset(pidlTarget,0,cbTotal); // Copy the source to the target CopyMemory(pidlTarget,(LPITEMIDLIST)pidlFull,cbTotal-sizeof(pidlTemp->mkid.cb)); LPSHELLFOLDER pShellFolder=GetShellFolder(pidlTarget); m_pMalloc->Free(pidlTarget); return pShellFolder; }
HRESULT STDMETHODCALLTYPE CFolder::ParseName(BSTR bName, FolderItem **ppid) { TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName), ppid); if (!ppid) return E_POINTER; *ppid = NULL; CComPtr<IShellFolder> psfCurrent; HRESULT hr = GetShellFolder(psfCurrent); if (FAILED_UNEXPECTEDLY(hr)) return hr; CComHeapPtr<ITEMIDLIST_RELATIVE> relativePidl; hr = psfCurrent->ParseDisplayName(NULL, NULL, bName, NULL, &relativePidl, NULL); if (!SUCCEEDED(hr)) return S_FALSE; CFolderItem* item = new CComObject<CFolderItem>(); item->AddRef(); item->Init(ILCombine(m_idlist, relativePidl)); *ppid = item; return S_OK; }
bool InstallDesktopIcon(const char *exe, const char *lnk, const char *desc) { return CreateShellLink(exe, AppendFileName(GetShellFolder("Desktop", HKEY_CURRENT_USER), lnk), desc, -1); }
void CFileSpec::Initialize(FS_BUILTINS spec) { TCHAR path[_MAX_PATH], *ptr; Initialize(); switch (spec) { case FS_EMPTY: // Nothing break; case FS_APP: // Full application path and name GetModuleFileName(NULL, path, sizeof(path)); // GetModuleFileName(AfxGetApp()->m_hInstance, path, sizeof(path)); SetFullSpec((LPCTSTR) path); break; case FS_APPDIR: // Application folder GetModuleFileName(NULL, path, sizeof(path)); // GetModuleFileName(AfxGetApp()->m_hInstance, path, sizeof(path)); SetFullSpec((LPCTSTR) path); m_ext = ""; m_fileName = ""; break; case FS_WINDIR: // Windows folder GetWindowsDirectory(path, sizeof(path)); if (path[strlen((LPCTSTR) path)] != '\\') strcat(path, "\\"); SetFullSpec((LPCTSTR) path); break; case FS_SYSDIR: // System folder GetSystemDirectory(path, sizeof(path)); if (path[strlen((LPCTSTR) path)] != '\\') strcat(path, "\\"); SetFullSpec((LPCTSTR) path); break; case FS_TMPDIR: // Temporary folder GetTempPath(sizeof(path), path); SetFullSpec((LPCTSTR) path); break; case FS_DESKTOP: // Desktop folder GetShellFolder("Desktop"); break; case FS_FAVOURITES: // Favourites folder GetShellFolder("Favorites"); break; case FS_TEMPNAME: GetTempPath(sizeof(path), path); strcpy(path, ptr = _tempnam(path, "~")); SetFullSpec((LPCTSTR) path); free(ptr); break; default: #ifdef _DEBUG afxDump << "Invalid initialization spec for CFileSpec, " << spec << "\n"; #endif ASSERT(NULL); } }