阻止将窗口Pin To Taskbar(移除菜单)

某些原因,不允许用户将窗口Pin To Taskbar,可以通过以下代码实现

void PreventPinning(HWND hWnd)
{
	HMODULE hShell = ::LoadLibraryW(L"Shell32.dll");
	if (hShell == NULL)
		return;
	typedef HRESULT(__stdcall *SHGETPROP)(HWND hwnd, REFIID riid, void** ppv);
	SHGETPROP pfGetPropertyStoreForWindow = reinterpret_cast<SHGETPROP>
			(::GetProcAddress(hShell, "SHGetPropertyStoreForWindow"));
	if (pfGetPropertyStoreForWindow)
	{
		CComQIPtr<IPropertyStore> pps;
		HRESULT hr = pfGetPropertyStoreForWindow(hWnd, IID_PPV_ARGS(&pps));
		// 暂不开放,禁止pin到任务栏
		PROPVARIANT propVar = { 0 };
		hr = ::InitPropVariantFromBoolean(TRUE, &propVar);
		if (SUCCEEDED(hr))
		{
			hr = pps->SetValue(PKEY_AppUserModel_PreventPinning, propVar);
			PropVariantClear(&propVar);
		}
	}
	pfGetPropertyStoreForWindow = NULL;
	::FreeLibrary(hShell);
}

 

发表回复