diff --git a/dll/win32/shell32/COpenWithMenu.cpp b/dll/win32/shell32/COpenWithMenu.cpp index 903d66f5d5..72ce5d16a2 100644 --- a/dll/win32/shell32/COpenWithMenu.cpp +++ b/dll/win32/shell32/COpenWithMenu.cpp @@ -110,10 +110,11 @@ COpenWithList::~COpenWithList() BOOL COpenWithList::Load() { - HKEY hKey; + HKEY hKey, hKeyApp; WCHAR wszName[256], wszBuf[100]; DWORD i = 0, cchName, dwSize; SApp *pApp; + PHKEY phKeyApp = &hKeyApp; if (RegOpenKeyEx(HKEY_CLASSES_ROOT, L"Applications", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { @@ -131,15 +132,34 @@ 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) + StringCbPrintfW(wszBuf, sizeof(wszBuf), L"%s", wszName); + if (RegOpenKeyW(hKey, wszBuf, phKeyApp) == 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");