[SHELL32][SHELL32_APITEST][SDK] Implement SHShouldShowWizards (#7614)

Implementing missing features...
JIRA issue: CORE-19278
- Move function definition from
  stubs.cpp into utils.cpp.
- Add prototype to <undocshell.h>.
This commit is contained in:
Katayama Hirofumi MZ 2025-01-17 13:36:20 +09:00 committed by GitHub
parent b1257cefe1
commit b68104a8a0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 158 additions and 11 deletions

View file

@ -896,17 +896,6 @@ SHSetUserPicturePathW(LPCWSTR lpPath, int csidl, LPVOID lpUnknown)
return E_FAIL; return E_FAIL;
} }
/*
* Unimplemented
*/
EXTERN_C BOOL
WINAPI
SHShouldShowWizards(LPVOID lpUnknown)
{
FIXME("SHShouldShowWizards() stub\n");
return FALSE;
}
/* /*
* Unimplemented * Unimplemented
*/ */

View file

@ -122,6 +122,36 @@ HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl)
return hr; return hr;
} }
/*************************************************************************
* SHShouldShowWizards [SHELL32.237]
*
* Used by printer and network features.
* @see https://undoc.airesoft.co.uk/shell32.dll/SHShouldShowWizards.php
*/
EXTERN_C
HRESULT WINAPI
SHShouldShowWizards(_In_ IUnknown *pUnknown)
{
HRESULT hr;
IShellBrowser *pBrowser;
hr = IUnknown_QueryService(pUnknown, SID_STopWindow, IID_PPV_ARG(IShellBrowser, &pBrowser));
if (FAILED(hr))
return hr;
SHELLSTATE state;
SHGetSetSettings(&state, SSF_WEBVIEW, FALSE);
if (state.fWebView &&
!SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
L"ShowWizardsTEST", FALSE, FALSE))
{
hr = S_FALSE;
}
pBrowser->Release();
return hr;
}
static BOOL static BOOL
OpenEffectiveToken( OpenEffectiveToken(
_In_ DWORD DesiredAccess, _In_ DWORD DesiredAccess,

View file

@ -33,6 +33,7 @@ list(APPEND SOURCE
SHCreateFileExtractIconW.cpp SHCreateFileExtractIconW.cpp
SHParseDisplayName.cpp SHParseDisplayName.cpp
SHRestricted.cpp SHRestricted.cpp
SHShouldShowWizards.cpp
She.cpp She.cpp
ShellExecCmdLine.cpp ShellExecCmdLine.cpp
ShellExecuteEx.cpp ShellExecuteEx.cpp

View file

@ -0,0 +1,123 @@
/*
* PROJECT: ReactOS API tests
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
* PURPOSE: Test for SHShouldShowWizards
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/
#include "shelltest.h"
#include <undocshell.h>
#include <versionhelpers.h>
class CDummyClass
: public IServiceProvider
, public IShellBrowser
{
public:
CDummyClass() { }
IUnknown *GetUnknown()
{
return static_cast<IServiceProvider *>(this);
}
// *** IUnknown methods ***
STDMETHODIMP QueryInterface(REFIID riid, VOID **ppvObj) override
{
if (riid == IID_IUnknown || riid == IID_IServiceProvider)
{
AddRef();
*ppvObj = static_cast<IServiceProvider *>(this);
return S_OK;
}
return E_NOINTERFACE;
}
STDMETHODIMP_(ULONG) AddRef() override
{
return 1;
}
STDMETHODIMP_(ULONG) Release() override
{
return 1;
}
// *** IOleWindow methods ***
STDMETHODIMP GetWindow(HWND *phwnd) override { return E_NOTIMPL; }
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) override { return E_NOTIMPL; }
// *** IShellBrowser methods ***
STDMETHODIMP InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override { return E_NOTIMPL; }
STDMETHODIMP SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override { return E_NOTIMPL; }
STDMETHODIMP RemoveMenusSB(HMENU hmenuShared) override { return E_NOTIMPL; }
STDMETHODIMP SetStatusTextSB(LPCOLESTR pszStatusText) override { return E_NOTIMPL; }
STDMETHODIMP EnableModelessSB(BOOL fEnable) override { return E_NOTIMPL; }
STDMETHODIMP TranslateAcceleratorSB(MSG *pmsg, WORD wID) override { return E_NOTIMPL; }
STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) override { return E_NOTIMPL; }
STDMETHODIMP GetViewStateStream(DWORD grfMode, IStream **ppStrm) override { return E_NOTIMPL; }
STDMETHODIMP GetControlWindow(UINT id, HWND *lphwnd) override { return E_NOTIMPL; }
STDMETHODIMP SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) override { return E_NOTIMPL; }
STDMETHODIMP QueryActiveShellView(struct IShellView **ppshv) override { return E_NOTIMPL; }
STDMETHODIMP OnViewWindowActive(struct IShellView *ppshv) override { return E_NOTIMPL; }
STDMETHODIMP SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override { return E_NOTIMPL; }
// *** IServiceProvider methods ***
STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
{
if (riid == IID_IShellBrowser)
{
AddRef();
*ppvObject = static_cast<IShellBrowser *>(this);
return S_OK;
}
return E_FAIL;
}
};
static VOID SetShowWizardsTEST(BOOL bValue)
{
DWORD dwValue = bValue;
SHRegSetUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
L"ShowWizardsTEST", REG_DWORD, &dwValue, sizeof(dwValue), SHREGSET_FORCE_HKCU);
}
START_TEST(SHShouldShowWizards)
{
// Save old values
SHELLSTATE state;
SHGetSetSettings(&state, SSF_WEBVIEW, FALSE);
BOOL bOldWebView = state.fWebView;
BOOL bOldTestValue = SHRegGetBoolUSValueW(
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
L"ShowWizardsTEST",
FALSE,
FALSE);
CDummyClass dummy;
HRESULT hr;
const BOOL bVistaPlus = IsWindowsVistaOrGreater();
state.fWebView = FALSE;
SHGetSetSettings(&state, SSF_WEBVIEW, TRUE);
SetShowWizardsTEST(FALSE);
hr = SHShouldShowWizards(dummy.GetUnknown());
ok_hex(hr, bVistaPlus ? S_FALSE : S_OK);
SetShowWizardsTEST(TRUE);
hr = SHShouldShowWizards(dummy.GetUnknown());
ok_hex(hr, bVistaPlus ? S_FALSE : S_OK);
state.fWebView = TRUE;
SHGetSetSettings(&state, SSF_WEBVIEW, TRUE);
SetShowWizardsTEST(FALSE);
hr = SHShouldShowWizards(dummy.GetUnknown());
ok_hex(hr, S_FALSE);
SetShowWizardsTEST(TRUE);
hr = SHShouldShowWizards(dummy.GetUnknown());
ok_hex(hr, bVistaPlus ? S_FALSE : S_OK);
// Restore old values
state.fWebView = bOldWebView;
SHGetSetSettings(&state, SSF_WEBVIEW, TRUE);
SetShowWizardsTEST(bOldTestValue);
}

View file

@ -45,6 +45,7 @@ extern void func_SHGetFileInfo(void);
extern void func_SHGetUserDisplayName(void); extern void func_SHGetUserDisplayName(void);
extern void func_SHLimitInputEdit(void); extern void func_SHLimitInputEdit(void);
extern void func_SHParseDisplayName(void); extern void func_SHParseDisplayName(void);
extern void func_SHShouldShowWizards(void);
extern void func_SHSimpleIDListFromPath(void); extern void func_SHSimpleIDListFromPath(void);
extern void func_SHRestricted(void); extern void func_SHRestricted(void);
@ -92,6 +93,7 @@ const struct test winetest_testlist[] =
{ "SHGetUserDisplayName", func_SHGetUserDisplayName }, { "SHGetUserDisplayName", func_SHGetUserDisplayName },
{ "SHLimitInputEdit", func_SHLimitInputEdit }, { "SHLimitInputEdit", func_SHLimitInputEdit },
{ "SHParseDisplayName", func_SHParseDisplayName }, { "SHParseDisplayName", func_SHParseDisplayName },
{ "SHShouldShowWizards", func_SHShouldShowWizards },
{ "SHSimpleIDListFromPath", func_SHSimpleIDListFromPath }, { "SHSimpleIDListFromPath", func_SHSimpleIDListFromPath },
{ "SHRestricted", func_SHRestricted }, { "SHRestricted", func_SHRestricted },

View file

@ -204,6 +204,8 @@ int WINAPI SHOutOfMemoryMessageBox(
LPCSTR lpCaption, LPCSTR lpCaption,
UINT uType); UINT uType);
HRESULT WINAPI SHShouldShowWizards(_In_ IUnknown *pUnknown);
DWORD WINAPI SHNetConnectionDialog( DWORD WINAPI SHNetConnectionDialog(
HWND hwndOwner, HWND hwndOwner,
LPCWSTR lpstrRemoteName, LPCWSTR lpstrRemoteName,