Reactos
at master 122 lines 4.4 kB view raw
1/* 2 * PROJECT: ReactOS API tests 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Test for SHShouldShowWizards 5 * COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) 6 */ 7 8#include "shelltest.h" 9#include <undocshell.h> 10#include <versionhelpers.h> 11 12class CDummyClass 13 : public IServiceProvider 14 , public IShellBrowser 15{ 16public: 17 CDummyClass() { } 18 19 IUnknown *GetUnknown() 20 { 21 return static_cast<IServiceProvider *>(this); 22 } 23 24 // *** IUnknown methods *** 25 STDMETHODIMP QueryInterface(REFIID riid, VOID **ppvObj) override 26 { 27 if (riid == IID_IUnknown || riid == IID_IServiceProvider) 28 { 29 AddRef(); 30 *ppvObj = static_cast<IServiceProvider *>(this); 31 return S_OK; 32 } 33 return E_NOINTERFACE; 34 } 35 STDMETHODIMP_(ULONG) AddRef() override 36 { 37 return 1; 38 } 39 STDMETHODIMP_(ULONG) Release() override 40 { 41 return 1; 42 } 43 44 // *** IOleWindow methods *** 45 STDMETHODIMP GetWindow(HWND *phwnd) override { return E_NOTIMPL; } 46 STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) override { return E_NOTIMPL; } 47 48 // *** IShellBrowser methods *** 49 STDMETHODIMP InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override { return E_NOTIMPL; } 50 STDMETHODIMP SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override { return E_NOTIMPL; } 51 STDMETHODIMP RemoveMenusSB(HMENU hmenuShared) override { return E_NOTIMPL; } 52 STDMETHODIMP SetStatusTextSB(LPCOLESTR pszStatusText) override { return E_NOTIMPL; } 53 STDMETHODIMP EnableModelessSB(BOOL fEnable) override { return E_NOTIMPL; } 54 STDMETHODIMP TranslateAcceleratorSB(MSG *pmsg, WORD wID) override { return E_NOTIMPL; } 55 STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) override { return E_NOTIMPL; } 56 STDMETHODIMP GetViewStateStream(DWORD grfMode, IStream **ppStrm) override { return E_NOTIMPL; } 57 STDMETHODIMP GetControlWindow(UINT id, HWND *lphwnd) override { return E_NOTIMPL; } 58 STDMETHODIMP SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) override { return E_NOTIMPL; } 59 STDMETHODIMP QueryActiveShellView(struct IShellView **ppshv) override { return E_NOTIMPL; } 60 STDMETHODIMP OnViewWindowActive(struct IShellView *ppshv) override { return E_NOTIMPL; } 61 STDMETHODIMP SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override { return E_NOTIMPL; } 62 63 // *** IServiceProvider methods *** 64 STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override 65 { 66 if (riid == IID_IShellBrowser) 67 { 68 AddRef(); 69 *ppvObject = static_cast<IShellBrowser *>(this); 70 return S_OK; 71 } 72 return E_FAIL; 73 } 74}; 75 76static VOID SetShowWizardsTEST(BOOL bValue) 77{ 78 DWORD dwValue = bValue; 79 SHRegSetUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", 80 L"ShowWizardsTEST", REG_DWORD, &dwValue, sizeof(dwValue), SHREGSET_FORCE_HKCU); 81} 82 83START_TEST(SHShouldShowWizards) 84{ 85 // Save old values 86 SHELLSTATE state; 87 SHGetSetSettings(&state, SSF_WEBVIEW, FALSE); 88 BOOL bOldWebView = state.fWebView; 89 BOOL bOldTestValue = SHRegGetBoolUSValueW( 90 L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", 91 L"ShowWizardsTEST", 92 FALSE, 93 FALSE); 94 95 CDummyClass dummy; 96 HRESULT hr; 97 98 state.fWebView = FALSE; 99 SHGetSetSettings(&state, SSF_WEBVIEW, TRUE); 100 SetShowWizardsTEST(FALSE); 101 hr = SHShouldShowWizards(dummy.GetUnknown()); 102 ok_hex(hr, (GetNTVersion() >= _WIN32_WINNT_WIN8) ? S_FALSE : S_OK); 103 104 SetShowWizardsTEST(TRUE); 105 hr = SHShouldShowWizards(dummy.GetUnknown()); 106 ok_hex(hr, (GetNTVersion() >= _WIN32_WINNT_WIN8) ? S_FALSE : S_OK); 107 108 state.fWebView = TRUE; 109 SHGetSetSettings(&state, SSF_WEBVIEW, TRUE); 110 SetShowWizardsTEST(FALSE); 111 hr = SHShouldShowWizards(dummy.GetUnknown()); 112 ok_hex(hr, S_FALSE); 113 114 SetShowWizardsTEST(TRUE); 115 hr = SHShouldShowWizards(dummy.GetUnknown()); 116 ok_hex(hr, (GetNTVersion() >= _WIN32_WINNT_WIN7) ? S_FALSE : S_OK); 117 118 // Restore old values 119 state.fWebView = bOldWebView; 120 SHGetSetSettings(&state, SSF_WEBVIEW, TRUE); 121 SetShowWizardsTEST(bOldTestValue); 122}