コード例 #1
0
ファイル: SpecialFolder.cpp プロジェクト: fin-alice/bb4nt
//================================================
void exec_folder_click(const struct _ITEMIDLIST * pidl)
{
	const TCHAR *p = ReadString(extensionsrcPath(), _T("blackbox.options.openFolderCommand:"), NULL);
	if (p)
	{
		TCHAR path[MAX_PATH]; TCHAR buffer[MAX_PATH*2];
		if (sh_get_displayname(NULL, pidl, SHGDN_FORPARSING, path))
		{
			post_command(replace_argument1(buffer, MAX_PATH*2, p, path));
			return;
		}
	}
	exec_pidl(pidl, _T("explore"), NULL);
}
コード例 #2
0
ファイル: Pidl.cpp プロジェクト: Jmos/bbclean-xzero450
char *replace_shellfolders(char *buffer, const char *path, bool search_path)
{
	char temp [MAX_PATH];
	const char *p = unquote(temp, path);

	if (false == is_relative_path(temp))
		return strcpy(buffer, temp);

	int id = get_csidl(&p);

	if (CSIDL_BLACKBOX == id || CSIDL_CURTHEME == id)
	{
		GetBlackboxPath(buffer, MAX_PATH);
		buffer[strlen(buffer)-1] = 0;
	}
	else
	if (NO_CSIDL == id)
	{
		if (search_path)
		{
			if (SearchPath(NULL, temp, ".exe", MAX_PATH, buffer, NULL))
				return buffer;
			else
				return strcpy(buffer, temp);
		}
		GetBlackboxPath(buffer, MAX_PATH);
	}
	else
	{
		// special folders, like CONTROLS
		LPITEMIDLIST pID;
		HRESULT hr = SHGetSpecialFolderLocation(NULL, id, &pID);
		if (NOERROR != hr)
			return strcpy(buffer, temp);

		// returns also things like "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
		// (unlike SHGetPathFromIDList)
		BOOL result = sh_get_displayname(NULL, pID, SHGDN_FORPARSING, buffer);
		SHMalloc_Free(pID);
		if (FALSE == result)
			return strcpy(buffer, temp);
	}

	if (p) strcat(buffer, p);
	return buffer;
}
コード例 #3
0
ファイル: Contextmenu.cpp プロジェクト: fin-alice/bb4nt
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void ShellContext::Invoke(int nCmd)
{
	HRESULT hr = S_OK;
	if (19 == nCmd) // rename
	{
		TCHAR oldName[256]; TCHAR newName[256]; WCHAR newNameW[256];
		sh_get_displayname(psfFolder, pidlItem, SHGDN_NORMAL, oldName);
		if (IDOK == EditBox(_T("bbLean"), _T("Enter new name:"), oldName, newName, 256))
		{
#ifdef UNICODE
			wcsncpy_s(newNameW, 256, newName, _TRUNCATE);
#else
			MultiByteToWideChar (CP_ACP, 0, newName, -1, newNameW, 256);
#endif
			hr = psfFolder->SetNameOf(NULL, pidlItem, newNameW, SHGDN_NORMAL, NULL);
		}
	}
	else
	{
		CMINVOKECOMMANDINFO ici;
		ici.cbSize          = sizeof(ici);
		ici.fMask           = 0;//CMIC_MASK_FLAG_NO_UI;
		ici.hwnd            = NULL;
		ici.lpVerb          = (const CHAR*)(nCmd - MIN_SHELL_ID);
		ici.lpParameters    = NULL;
		ici.lpDirectory     = NULL;
		ici.nShow           = SW_SHOWNORMAL;
		ici.dwHotKey        = 0;
		ici.hIcon           = NULL;
		hr = pContextMenu->InvokeCommand(&ici);
	}

	if (0==SUCCEEDED(hr))
	{
		;//MessageBeep(MB_OK);
	}

}