예제 #1
0
파일: comcat.cpp 프로젝트: GYGit/reactos
BOOL CComCatCachedCategory::LoadFromRegistry()
{
    WCHAR bufKey[MAX_PATH];
    WCHAR guidStr[MAX_PATH];
    DWORD dataSize, i;
    CComHeapPtr<CATCACHEHDR> buffer;
    GUID *guidArray;

    if (!fLocalDsa)
        return FALSE;

    dataSize = 0;
    if (!StringFromGUID2(fCategory, guidStr, MAX_PATH))
        return FALSE;

    wsprintf(bufKey, L"%s\\%s\\%s", REGPATH , guidStr, L"Enum");

    // Try to read key and get proper value size
    if (SHGetValue(HKEY_CURRENT_USER, bufKey, IMPLEMENTING, NULL, NULL, &dataSize))
        return FALSE;

    buffer.Attach((PCATCACHEHDR)CoTaskMemAlloc(dataSize));

    SHGetValue(HKEY_CURRENT_USER, bufKey, IMPLEMENTING, NULL, buffer, &dataSize);
    guidArray = (GUID*)(buffer + 1);
    for (i = 0; i < buffer->classCount; i++)
    {
        // Add class to cache
        DSA_InsertItem(fLocalDsa, DSA_APPEND, guidArray + i);
    }

    return TRUE;
}
예제 #2
0
HRESULT CBandSiteMenu::_CreateNewISFBand(HWND hwnd, REFIID riid, void** ppv)
{
    WCHAR path[MAX_PATH];
    WCHAR message[256];
    BROWSEINFOW bi = { hwnd, NULL, path };

    if (LoadStringW(GetModuleHandleW(L"browseui.dll"), IDS_BROWSEFORNEWTOOLAR, message, _countof(message)))
        bi.lpszTitle = message;
    else
        bi.lpszTitle = L"Choose a folder";

    CComHeapPtr<ITEMIDLIST> pidlSelected;
    pidlSelected.Attach(SHBrowseForFolderW(&bi));
    if (pidlSelected == NULL)
        return S_FALSE;

    CComPtr<IShellFolderBand> pISFB;
    HRESULT hr = CISFBand_CreateInstance(IID_IShellFolderBand, (PVOID*)&pISFB);
    if (FAILED_UNEXPECTEDLY(hr))
        return hr;

    hr = pISFB->InitializeSFB(NULL, pidlSelected);
    if (FAILED_UNEXPECTEDLY(hr))
        return hr;

    return pISFB->QueryInterface(riid, ppv);
}
예제 #3
0
HRESULT AudioSessionService::GetAppProperties(PCWSTR pszAppId, PWSTR* ppszName, PWSTR* ppszIcon, ULONG *background)
{
	*ppszIcon = nullptr;
	*ppszName = nullptr;
	*background = 0;

	CComPtr<IShellItem2> item;
	FAST_FAIL(SHCreateItemInKnownFolder(FOLDERID_AppsFolder, KF_FLAG_DONT_VERIFY, pszAppId, IID_PPV_ARGS(&item)));

	CComHeapPtr<wchar_t> itemName;
	FAST_FAIL(item->GetString(PKEY_ItemNameDisplay, &itemName));
	FAST_FAIL(item->GetUInt32(PKEY_AppUserModel_Background, background));

	CComHeapPtr<wchar_t> installPath;
	FAST_FAIL(item->GetString(PKEY_AppUserModel_PackageInstallPath, &installPath));

	CComHeapPtr<wchar_t> iconPath;
	FAST_FAIL(item->GetString(PKEY_AppUserModel_Icon, &iconPath));

	wchar_t fullPath[MAX_PATH] = {};
	FAST_FAIL(PathCchCombine(fullPath, ARRAYSIZE(fullPath), installPath, iconPath));

	CStringW path(fullPath);

	if (!PathFileExists(path))
	{
		path.Replace(L".png", L".scale-100.png");
	}

	FAST_FAIL(SHStrDup(path, ppszIcon));
	*ppszName = itemName.Detach();
	return S_OK;
}
예제 #4
0
파일: volume.cpp 프로젝트: RickSaada/blog
void LogMeters(IMMDevice *pMMDevice) {
    // get the current audio peak meter level for this endpoint
    CComPtr<IAudioMeterInformation> pAudioMeterInformation;
    HRESULT hr = pMMDevice->Activate(
        __uuidof(IAudioMeterInformation),
        CLSCTX_ALL,
        NULL,
        reinterpret_cast<void**>(&pAudioMeterInformation)
        );
    if (FAILED(hr)) {
        ERR(L"IMMDevice::Activate(IAudioMeterInformation) failed: hr = 0x%08x", hr);
        return;
    }

    float peak = 0.0f;
    hr = pAudioMeterInformation->GetPeakValue(&peak);
    if (FAILED(hr)) {
        ERR(L"IAudioMeterInformation::GetPeakValue() failed: hr = 0x%08x", hr);
        return;
    }

    LOG(L"Peak: %g", peak);

    UINT nMeterChannelCount;
    hr = pAudioMeterInformation->GetMeteringChannelCount(&nMeterChannelCount);
    if (FAILED(hr)) {
        ERR(L"IAudioMeterInformation::GetMeteringChannelCount() failed: hr = 0x%08x", hr);
        return;
    }

    if (nMeterChannelCount == 0) {
        ERR(L"IAudioMeterInformation::GetMeteringChannelCount returned zero channels");
        return;
    }

    CComHeapPtr<float> pfPeaks;
    if (!pfPeaks.Allocate(nMeterChannelCount)) {
        ERR(L"Could not allocate %u floats", nMeterChannelCount);
        return;
    }

    hr = pAudioMeterInformation->GetChannelsPeakValues(nMeterChannelCount, pfPeaks);
    if (FAILED(hr)) {
        ERR(L"IAudioMeterInformation::GetChannelsPeakValues() failed: hr = 0x%08x", hr);
        return;
    }

    for (UINT c = 0; c < nMeterChannelCount; c++) {
        LOG(L"Peak, channel %u of %u: %g", c + 1, nMeterChannelCount, pfPeaks[c]);
    }
}
예제 #5
0
파일: comcat.cpp 프로젝트: GYGit/reactos
HRESULT CComCatCachedCategory::CacheDSA()
{
    WCHAR                               bufKey[MAX_PATH];
    WCHAR                               guidStr[MAX_PATH];
    UINT                                elemCount;
    UINT                                i;
    UINT                                bufferSize;
    CComHeapPtr<CATCACHEHDR>            buffer;
    GUID                                *guidArray;
    GUID                                *tmp;

    elemCount = DSA_GetItemCount(fLocalDsa);
    bufferSize = sizeof(CATCACHEHDR) + elemCount * sizeof(GUID);
    if (!StringFromGUID2(fCategory, guidStr, MAX_PATH))
        return E_FAIL;

    buffer.Attach((PCATCACHEHDR)CoTaskMemAlloc(bufferSize));
    if (!buffer)
        return E_OUTOFMEMORY;

    // Correctly fill cache header
    buffer->dwSize = sizeof(CATCACHEHDR);
    buffer->version = 1;
    GetSystemTime(&buffer->writeTime);
    buffer->classCount = (DWORD)elemCount;

    guidArray = (GUID*)(buffer + 1);
    wsprintf(bufKey, L"%s\\%s\\%s", REGPATH , guidStr, L"Enum");

    // Write DSA contents inside the memory buffer allocated
    for(i = 0; i < elemCount; i++)
    {
        tmp = (GUID*)DSA_GetItemPtr(fLocalDsa, i);
        if (tmp)
        {
            guidArray[i] = *tmp;
        }
    }

    // Save items to registry
    SHSetValue(HKEY_CURRENT_USER, bufKey, IMPLEMENTING, REG_BINARY, buffer, bufferSize);

    guidArray = NULL;
    return S_OK;
}
예제 #6
0
HRESULT STDMETHODCALLTYPE CShellDispatch::BrowseForFolder(LONG Hwnd, BSTR Title, LONG Options, VARIANT RootFolder, Folder **ppsdf)
{
    TRACE("(%p, %lu, %ls, %lu, %s, %p)\n", this, Hwnd, Title, Options, debugstr_variant(&RootFolder), ppsdf);

    *ppsdf = NULL;

    if (!is_optional_argument(&RootFolder))
        FIXME("root folder is ignored\n");

    BROWSEINFOW bi = { 0 };
    bi.hwndOwner = reinterpret_cast<HWND>(LongToHandle(Hwnd));
    bi.lpszTitle = Title;
    bi.ulFlags = Options;

    CComHeapPtr<ITEMIDLIST> selection;
    selection.Attach(SHBrowseForFolderW(&bi));
    if (!selection)
        return S_FALSE;

    return ShellObjectCreatorInit<CFolder>(static_cast<LPITEMIDLIST>(selection), IID_PPV_ARG(Folder, ppsdf));
}
예제 #7
0
HRESULT AudioSessionService::GetAppProperties(PCWSTR pszAppId, PWSTR* ppszName, PWSTR* ppszIcon, ULONG *background)
{
    *ppszIcon = nullptr;
    *ppszName = nullptr;
    *background = 0;

    CComPtr<IShellItem2> item;
    FAST_FAIL(SHCreateItemInKnownFolder(FOLDERID_AppsFolder, KF_FLAG_DONT_VERIFY, pszAppId, IID_PPV_ARGS(&item)));

    CComHeapPtr<wchar_t> itemName;
    FAST_FAIL(item->GetString(PKEY_ItemNameDisplay, &itemName));
    FAST_FAIL(item->GetUInt32(PKEY_AppUserModel_Background, background));

    CComHeapPtr<wchar_t> installPath;
    FAST_FAIL(item->GetString(PKEY_AppUserModel_PackageInstallPath, &installPath));

    CComHeapPtr<wchar_t> iconPath;
    FAST_FAIL(item->GetString(PKEY_AppUserModel_Icon, &iconPath));

    CComHeapPtr<wchar_t> fullPackagePath;
    FAST_FAIL(item->GetString(PKEY_AppUserModel_PackageFullName, &fullPackagePath));

    CComPtr<IMrtResourceManager> mrtResMgr;
    FAST_FAIL(CoCreateInstance(__uuidof(MrtResourceManager), nullptr, CLSCTX_INPROC, IID_PPV_ARGS(&mrtResMgr)));
    FAST_FAIL(mrtResMgr->InitializeForPackage(fullPackagePath));

    CComPtr<IResourceMap> resourceMap;
    FAST_FAIL(mrtResMgr->GetMainResourceMap(IID_PPV_ARGS(&resourceMap)));

    CComHeapPtr<wchar_t> resolvedIconPath;
    FAST_FAIL(resourceMap->GetFilePath(iconPath, &resolvedIconPath));

    *ppszIcon = resolvedIconPath.Detach();
    *ppszName = itemName.Detach();
    return S_OK;
}