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; }
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); }
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; }
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]); } }
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; }
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)); }
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; }