ReactOS 0.4.16-dev-1106-g00b5dc8
SHShouldShowWizards.cpp
Go to the documentation of this file.
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
13 : public IServiceProvider
14 , public IShellBrowser
15{
16public:
18
20 {
21 return static_cast<IServiceProvider *>(this);
22 }
23
24 // *** IUnknown methods ***
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 }
36 {
37 return 1;
38 }
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; }
56 STDMETHODIMP GetViewStateStream(DWORD grfMode, IStream **ppStrm) override { return E_NOTIMPL; }
57 STDMETHODIMP GetControlWindow(UINT id, HWND *lphwnd) 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
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
84{
85 // Save old values
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
96 HRESULT hr;
97 const BOOL bVistaPlus = IsWindowsVistaOrGreater();
98
99 state.fWebView = FALSE;
102 hr = SHShouldShowWizards(dummy.GetUnknown());
103 ok_hex(hr, bVistaPlus ? S_FALSE : S_OK);
104
106 hr = SHShouldShowWizards(dummy.GetUnknown());
107 ok_hex(hr, bVistaPlus ? S_FALSE : S_OK);
108
109 state.fWebView = TRUE;
112 hr = SHShouldShowWizards(dummy.GetUnknown());
113 ok_hex(hr, S_FALSE);
114
116 hr = SHShouldShowWizards(dummy.GetUnknown());
117 ok_hex(hr, bVistaPlus ? S_FALSE : S_OK);
118
119 // Restore old values
120 state.fWebView = bOldWebView;
122 SetShowWizardsTEST(bOldTestValue);
123}
static VOID SetShowWizardsTEST(BOOL bValue)
static int state
Definition: maze.c:121
#define ok_hex(expression, result)
Definition: atltest.h:94
#define START_TEST(x)
Definition: atltest.h:75
#define STDMETHODIMP
Definition: basetyps.h:43
const GUID IID_IUnknown
STDMETHODIMP_(ULONG) AddRef() override
STDMETHODIMP GetWindow(HWND *phwnd) override
STDMETHODIMP SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override
STDMETHODIMP SetStatusTextSB(LPCOLESTR pszStatusText) override
STDMETHODIMP QueryInterface(REFIID riid, VOID **ppvObj) override
STDMETHODIMP_(ULONG) Release() override
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) override
STDMETHODIMP QueryActiveShellView(struct IShellView **ppshv) override
STDMETHODIMP TranslateAcceleratorSB(MSG *pmsg, WORD wID) override
STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
IUnknown * GetUnknown()
STDMETHODIMP GetViewStateStream(DWORD grfMode, IStream **ppStrm) override
STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) override
STDMETHODIMP InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override
STDMETHODIMP SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) override
STDMETHODIMP EnableModelessSB(BOOL fEnable) override
STDMETHODIMP RemoveMenusSB(HMENU hmenuShared) override
STDMETHODIMP OnViewWindowActive(struct IShellView *ppshv) override
STDMETHODIMP SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override
STDMETHODIMP GetControlWindow(UINT id, HWND *lphwnd) override
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
UINT uFlags
Definition: api.c:59
EXTERN_C HRESULT WINAPI SHShouldShowWizards(_In_ IUnknown *pUnknown)
Definition: utils.cpp:216
LONG WINAPI SHRegSetUSValueW(LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
Definition: reg.c:673
BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR pszSubKey, LPCWSTR pszValue, BOOL fIgnoreHKCU, BOOL fDefault)
Definition: reg.c:770
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
REFIID riid
Definition: atlbase.h:39
ULONG AddRef()
ULONG Release()
#define S_OK
Definition: intsafe.h:52
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
#define REFIID
Definition: guiddef.h:118
#define REG_DWORD
Definition: sdbapi.c:596
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
HRESULT hr
Definition: shlfolder.c:183
#define SSF_WEBVIEW
Definition: shlobj.h:1628
#define SHREGSET_FORCE_HKCU
Definition: shlwapi.h:321
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
Definition: scsiwmi.h:51
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
uint32_t ULONG
Definition: typedefs.h:59
VERSIONHELPERAPI IsWindowsVistaOrGreater()
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364