Пример #1
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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);
	}
}