阻止将窗口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);
}