diff --git a/dll/win32/shell32/COpenWithMenu.cpp b/dll/win32/shell32/COpenWithMenu.cpp index 903d66f5d53..335236d96ae 100644 --- a/dll/win32/shell32/COpenWithMenu.cpp +++ b/dll/win32/shell32/COpenWithMenu.cpp @@ -110,7 +110,7 @@ COpenWithList::~COpenWithList() BOOL COpenWithList::Load() { - HKEY hKey; + HKEY hKey, hKeyApp; WCHAR wszName[256], wszBuf[100]; DWORD i = 0, cchName, dwSize; SApp *pApp; @@ -131,18 +131,38 @@ BOOL COpenWithList::Load() if (pApp) { - StringCbPrintfW(wszBuf, sizeof(wszBuf), L"%s\\shell\\open\\command", wszName); - dwSize = sizeof(pApp->wszCmd); - if (RegGetValueW(hKey, wszBuf, L"", RRF_RT_REG_SZ, NULL, pApp->wszCmd, &dwSize) != ERROR_SUCCESS) + if (RegOpenKeyW(hKey, wszName, &hKeyApp) == ERROR_SUCCESS) { - ERR("Failed to add app %ls\n", wszName); - pApp->bHidden = TRUE; + if ((RegQueryValueExW(hKeyApp, L"NoOpenWith", NULL, NULL, NULL, NULL) != ERROR_SUCCESS) && + (RegQueryValueExW(hKeyApp, L"NoStartPage", NULL, NULL, NULL, NULL) != ERROR_SUCCESS)) + { + StringCbPrintfW(wszBuf, sizeof(wszBuf), L"%s\\shell\\open\\command", wszName); + dwSize = sizeof(pApp->wszCmd); + if (RegGetValueW(hKey, wszBuf, L"", RRF_RT_REG_SZ, NULL, pApp->wszCmd, &dwSize) != ERROR_SUCCESS) + { + ERR("Failed to add app %ls\n", wszName); + pApp->bHidden = TRUE; + } + else + { + TRACE("App added %ls\n", pApp->wszCmd); + } + } + else + { + pApp->bHidden = TRUE; + } + RegCloseKey(hKeyApp); } else - TRACE("App added %ls\n", pApp->wszCmd); + { + pApp->bHidden = TRUE; + } } else + { ERR("AddInternal failed\n"); + } } RegCloseKey(hKey);