ReactOS 0.4.17-dev-470-gf9e3448
CShellDispatch Class Reference

#include <CShellDispatch.h>

Inheritance diagram for CShellDispatch:
Collaboration diagram for CShellDispatch:

Public Member Functions

 CShellDispatch ()
 
 ~CShellDispatch ()
 
HRESULT Initialize ()
 
STDMETHOD() get_Application (IDispatch **ppid) override
 
STDMETHOD() get_Parent (IDispatch **ppid) override
 
STDMETHOD() NameSpace (VARIANT vDir, Folder **ppsdf) override
 
STDMETHOD() BrowseForFolder (LONG Hwnd, BSTR Title, LONG Options, VARIANT RootFolder, Folder **ppsdf) override
 
STDMETHOD() Windows (IDispatch **ppid) override
 
STDMETHOD() Open (VARIANT vDir) override
 
STDMETHOD() Explore (VARIANT vDir) override
 
STDMETHOD() MinimizeAll () override
 
STDMETHOD() UndoMinimizeALL () override
 
STDMETHOD() FileRun () override
 
STDMETHOD() CascadeWindows () override
 
STDMETHOD() TileVertically () override
 
STDMETHOD() TileHorizontally () override
 
STDMETHOD() ShutdownWindows () override
 
STDMETHOD() Suspend () override
 
STDMETHOD() EjectPC () override
 
STDMETHOD() SetTime () override
 
STDMETHOD() TrayProperties () override
 
STDMETHOD() Help () override
 
STDMETHOD() FindFiles () override
 
STDMETHOD() FindComputer () override
 
STDMETHOD() RefreshMenu () override
 
STDMETHOD() ControlPanelItem (BSTR szDir) override
 
STDMETHOD() IsRestricted (BSTR group, BSTR restriction, LONG *value) override
 
STDMETHOD() ShellExecute (BSTR file, VARIANT args, VARIANT dir, VARIANT op, VARIANT show) override
 
STDMETHOD() FindPrinter (BSTR name, BSTR location, BSTR model) override
 
STDMETHOD() GetSystemInformation (BSTR name, VARIANT *ret) override
 
STDMETHOD() ServiceStart (BSTR service, VARIANT persistent, VARIANT *ret) override
 
STDMETHOD() ServiceStop (BSTR service, VARIANT persistent, VARIANT *ret) override
 
STDMETHOD() IsServiceRunning (BSTR service, VARIANT *running) override
 
STDMETHOD() CanStartStopService (BSTR service, VARIANT *ret) override
 
STDMETHOD() ShowBrowserBar (BSTR clsid, VARIANT show, VARIANT *ret) override
 
STDMETHOD() AddToRecent (VARIANT file, BSTR category) override
 
STDMETHOD() WindowsSecurity () override
 
STDMETHOD() ToggleDesktop () override
 
STDMETHOD() ExplorerPolicy (BSTR policy, VARIANT *value) override
 
STDMETHOD() GetSetting (LONG setting, VARIANT_BOOL *result) override
 
STDMETHOD() GetInterfaceSafetyOptions (REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions) override
 
STDMETHOD() SetInterfaceSafetyOptions (REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions) override
 
STDMETHOD() SetSite (IUnknown *pUnkSite) override
 
STDMETHOD() GetSite (REFIID riid, PVOID *ppvSite) override
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT GetInterfaceSafetyOptions ([in] REFIID riid, [out] DWORD *pdwSupportedOptions, [out] DWORD *pdwEnabledOptions)
 
HRESULT SetInterfaceSafetyOptions ([in] REFIID riid, [in] DWORD dwOptionSetMask, [in] DWORD dwEnabledOptions)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT SetSite ([in] IUnknown *pUnkSite)
 
HRESULT GetSite ([in] REFIID riid, [out, iid_is(riid)] PVOID *ppvSite)
 

Additional Inherited Members

- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IObjectWithSite
typedef IObjectWithSiteLPOBJECTWITHSITE
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 13 of file CShellDispatch.h.

Constructor & Destructor Documentation

◆ CShellDispatch()

CShellDispatch::CShellDispatch ( )

Definition at line 25 of file CShellDispatch.cpp.

26{
27}

◆ ~CShellDispatch()

CShellDispatch::~CShellDispatch ( )

Definition at line 29 of file CShellDispatch.cpp.

30{
31}

Member Function Documentation

◆ AddToRecent()

HRESULT STDMETHODCALLTYPE CShellDispatch::AddToRecent ( VARIANT  file,
BSTR  category 
)
override

Definition at line 508 of file CShellDispatch.cpp.

509{
510 TRACE("(%p, %s, %ls)\n", this, wine_dbgstr_variant(&file), category);
511
513 HRESULT hr = VariantToIdlist(&file, &idlist);
514 if (hr == S_OK)
516 else
517 hr = S_FALSE;
518 return hr;
519}
HRESULT hr
Definition: delayimp.cpp:582
#define S_OK
Definition: intsafe.h:52
HRESULT VariantToIdlist(_In_ VARIANT *pV, _Out_ LPITEMIDLIST *ppidl)
Definition: prop.cpp:68
void WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv)
Definition: shellord.c:1015
#define SHARD_PIDL
Definition: shlobj.h:1190
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define TRACE(s)
Definition: solgame.cpp:4
Definition: fci.c:127
#define S_FALSE
Definition: winerror.h:3451

◆ BrowseForFolder()

HRESULT STDMETHODCALLTYPE CShellDispatch::BrowseForFolder ( LONG  Hwnd,
BSTR  Title,
LONG  Options,
VARIANT  RootFolder,
Folder **  ppsdf 
)
override

Definition at line 93 of file CShellDispatch.cpp.

94{
95 TRACE("(%p, %lu, %ls, %lu, %s, %p)\n", this, Hwnd, Title, Options, debugstr_variant(&RootFolder), ppsdf);
96
97 *ppsdf = NULL;
98
99 BROWSEINFOW bi = { 0 };
100 bi.hwndOwner = reinterpret_cast<HWND>(LongToHandle(Hwnd));
101 bi.lpszTitle = Title;
103
105 if (!is_optional_argument(&RootFolder) && VariantToIdlist(&RootFolder, &idlist) == S_OK)
106 bi.pidlRoot = idlist;
107
109 selection.Attach(SHBrowseForFolderW(&bi));
110 if (!selection)
111 return S_FALSE;
112
113 return ShellObjectCreatorInit<CFolder>(static_cast<LPITEMIDLIST>(selection), IID_PPV_ARG(Folder, ppsdf));
114}
#define LongToHandle(h)
Definition: basetsd.h:76
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brfolder.cpp:1460
int selection
Definition: ctm.c:92
static CHAR Title[MAX_PATH]
Definition: dem.c:257
#define NULL
Definition: types.h:112
static BOOL is_optional_argument(const VARIANT *arg)
static const char * debugstr_variant(const VARIANT *var)
Definition: dom.c:505
#define BIF_NEWDIALOGSTYLE
Definition: shlobj.h:1239
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
PCIDLIST_ABSOLUTE pidlRoot
Definition: shlobj.h:1217
UINT ulFlags
Definition: shlobj.h:1220
HWND hwndOwner
Definition: shlobj.h:1216
LPCWSTR lpszTitle
Definition: shlobj.h:1219
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
Definition: wdfdevice.h:3540
#define IID_PPV_ARG(Itype, ppType)

◆ CanStartStopService()

HRESULT STDMETHODCALLTYPE CShellDispatch::CanStartStopService ( BSTR  service,
VARIANT ret 
)
override

Definition at line 487 of file CShellDispatch.cpp.

488{
489 TRACE("(%p, %ls, %p)\n", this, service, ret);
490
491 SC_HANDLE hSvc;
493 if (SUCCEEDED(hr))
494 CloseServiceHandle(hSvc);
495 V_VT(ret) = VT_BOOL;
496 V_BOOL(ret) = (hr == S_OK ? VARIANT_TRUE : VARIANT_FALSE);
497 return S_OK;
498}
@ VT_BOOL
Definition: compat.h:2306
static HRESULT OpenServiceHelper(LPCWSTR name, DWORD access, SC_HANDLE &hSvc)
return ret
Definition: mutex.c:146
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_VT(A)
Definition: oleauto.h:211
#define SERVICE_START
Definition: winsvc.h:63
#define SERVICE_STOP
Definition: winsvc.h:64
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:580

◆ CascadeWindows()

HRESULT STDMETHODCALLTYPE CShellDispatch::CascadeWindows ( )
override

Definition at line 179 of file CShellDispatch.cpp.

180{
181 TRACE("(%p)\n", this);
183}
static HRESULT PostTrayCommand(UINT cmd)
#define TRAYCMD_CASCADE
Definition: undocshell.h:998

◆ ControlPanelItem()

HRESULT STDMETHODCALLTYPE CShellDispatch::ControlPanelItem ( BSTR  szDir)
override

Definition at line 254 of file CShellDispatch.cpp.

255{
256 TRACE("(%p, %ls)\n", this, szDir);
257 if (LOBYTE(GetVersion()) < 6)
259 else if (!szDir)
260 return E_INVALIDARG; // NT5 does not check, just silently fails
261 else
263 return S_OK;
264}
#define E_INVALIDARG
Definition: ddrawi.h:101
DWORD WINAPI GetVersion(void)
Definition: version.c:1458
EXTERN_C BOOL WINAPI SHELL32_RunControlPanel(_In_ PCWSTR commandLine, _In_opt_ HWND parent)
#define LOBYTE(W)
Definition: jmemdos.c:487
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2778
#define SW_SHOWNORMAL
Definition: winuser.h:781

◆ EjectPC()

HRESULT STDMETHODCALLTYPE CShellDispatch::EjectPC ( )
override

Definition at line 209 of file CShellDispatch.cpp.

210{
211 TRACE("(%p)\n", this);
213}
#define TRAYCMD_EJECT
Definition: undocshell.h:1004

◆ Explore()

HRESULT STDMETHODCALLTYPE CShellDispatch::Explore ( VARIANT  vDir)
override

Definition at line 155 of file CShellDispatch.cpp.

156{
157 TRACE("(%p, %s)\n", this, debugstr_variant(&vDir));
158 return OpenFolder(vDir, L"explore");
159}
static HRESULT OpenFolder(VARIANT vDir, LPCWSTR verb=NULL)
#define L(x)
Definition: resources.c:13

◆ ExplorerPolicy()

HRESULT STDMETHODCALLTYPE CShellDispatch::ExplorerPolicy ( BSTR  policy,
VARIANT value 
)
override

Definition at line 536 of file CShellDispatch.cpp.

537{
538 TRACE("(%p, %ls, %p)\n", this, policy, value);
539 return E_NOTIMPL;
540}
WINBASEAPI _Check_return_ _Out_ AppPolicyProcessTerminationMethod * policy
Definition: appmodel.h:78
#define E_NOTIMPL
Definition: ddrawi.h:99
Definition: pdh_main.c:96

◆ FileRun()

HRESULT STDMETHODCALLTYPE CShellDispatch::FileRun ( )
override

Definition at line 173 of file CShellDispatch.cpp.

174{
175 TRACE("(%p)\n", this);
177}
#define TRAYCMD_RUN_DIALOG
Definition: undocshell.h:996

◆ FindComputer()

HRESULT STDMETHODCALLTYPE CShellDispatch::FindComputer ( )
override

Definition at line 239 of file CShellDispatch.cpp.

240{
241 TRACE("(%p)\n", this);
243}
#define TRAYCMD_SEARCH_COMPUTERS
Definition: undocshell.h:1020

◆ FindFiles()

HRESULT STDMETHODCALLTYPE CShellDispatch::FindFiles ( )
override

Definition at line 233 of file CShellDispatch.cpp.

234{
235 TRACE("(%p)\n", this);
237}
#define TRAYCMD_SEARCH_FILES
Definition: undocshell.h:1019

◆ FindPrinter()

HRESULT STDMETHODCALLTYPE CShellDispatch::FindPrinter ( BSTR  name,
BSTR  location,
BSTR  model 
)
override

Definition at line 308 of file CShellDispatch.cpp.

309{
310 TRACE("(%p, %ls, %ls, %ls)\n", this, name, location, model);
311 return E_NOTIMPL;
312}
Definition: name.c:39

◆ get_Application()

HRESULT STDMETHODCALLTYPE CShellDispatch::get_Application ( IDispatch **  ppid)
override

Definition at line 39 of file CShellDispatch.cpp.

40{
41 TRACE("(%p, %p)\n", this, ppid);
42
43 if (!ppid)
44 return E_INVALIDARG;
45
46 *ppid = this;
47 AddRef();
48
49 return S_OK;
50}
ULONG AddRef()

◆ get_Parent()

HRESULT STDMETHODCALLTYPE CShellDispatch::get_Parent ( IDispatch **  ppid)
override

Definition at line 52 of file CShellDispatch.cpp.

53{
54 TRACE("(%p, %p)\n", this, ppid);
55
56 if (ppid)
57 {
58 *ppid = static_cast<IDispatch*>(this);
59 AddRef();
60 }
61
62 return S_OK;
63}

◆ GetInterfaceSafetyOptions()

HRESULT STDMETHODCALLTYPE CShellDispatch::GetInterfaceSafetyOptions ( REFIID  riid,
DWORD pdwSupportedOptions,
DWORD pdwEnabledOptions 
)
override

Implements IObjectSafety.

Definition at line 571 of file CShellDispatch.cpp.

572{
573 TRACE("(%p, %s, %p, %p)\n", this, wine_dbgstr_guid(&riid), pdwSupportedOptions, pdwEnabledOptions);
574 return E_NOTIMPL;
575}
REFIID riid
Definition: atlbase.h:39
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171

◆ GetSetting()

HRESULT STDMETHODCALLTYPE CShellDispatch::GetSetting ( LONG  setting,
VARIANT_BOOL result 
)
override

Definition at line 545 of file CShellDispatch.cpp.

546{
547 TRACE("(%p, %lu, %p)\n", this, setting, result);
548
549 int flag = 0;
550 SHELLSTATE ss = { };
552 switch (setting)
553 {
554 case SSF_SHOWALLOBJECTS: flag = ss.fShowAllObjects; break;
555 case SSF_SHOWEXTENSIONS: flag = ss.fShowExtensions; break;
556 case SSF_SHOWSYSFILES: flag = ss.fShowSysFiles; break;
557 case SSF_DONTPRETTYPATH: flag = ss.fDontPrettyPath; break;
558 case SSF_NOCONFIRMRECYCLE: flag = ss.fNoConfirmRecycle; break;
559 case SSF_SHOWSUPERHIDDEN: flag = ss.fShowSuperHidden; break;
560 case SSF_SEPPROCESS: flag = ss.fSepProcess; break;
561 case SSF_STARTPANELON: flag = ss.fStartPanelOn; break;
563 default: *result = VARIANT_FALSE; return S_FALSE;
564 }
565 *result = flag ? VARIANT_TRUE : VARIANT_FALSE;
566 return S_OK;
567}
#define FALSE
Definition: types.h:117
BOOL WINAPI IsOS(DWORD feature)
Definition: main.c:2392
#define SSF_SERVERADMINUI
GLuint64EXT * result
Definition: glext.h:11304
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
Definition: glfuncs.h:52
#define ss
Definition: i386-dis.c:441
#define OS_SERVERADMINUI
Definition: shlwapi.h:260
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
#define SSF_DONTPRETTYPATH
Definition: shlobj.h:1630
#define SSF_SEPPROCESS
Definition: shlobj.h:1638
#define SSF_NOCONFIRMRECYCLE
Definition: shlobj.h:1634
#define SSF_SHOWSYSFILES
Definition: shlobj.h:1625
#define SSF_SHOWEXTENSIONS
Definition: shlobj.h:1622
#define SSF_STARTPANELON
Definition: shlobj.h:1641
#define SSF_SHOWSUPERHIDDEN
Definition: shlobj.h:1637
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1621

◆ GetSite()

HRESULT STDMETHODCALLTYPE CShellDispatch::GetSite ( REFIID  riid,
PVOID ppvSite 
)
override

Implements IObjectWithSite.

Definition at line 591 of file CShellDispatch.cpp.

592{
593 TRACE("(%p, %s, %p)\n", this, wine_dbgstr_guid(&riid), ppvSite);
594 return E_NOTIMPL;
595}

◆ GetSystemInformation()

HRESULT STDMETHODCALLTYPE CShellDispatch::GetSystemInformation ( BSTR  name,
VARIANT ret 
)
override

Definition at line 314 of file CShellDispatch.cpp.

315{
316 TRACE("(%p, %ls, %p)\n", this, name, ret);
317
318 if (!lstrcmpiW(name, L"ProcessorArchitecture"))
319 {
322 V_VT(ret) = VT_I4;
324 return S_OK;
325 }
326 else if (!lstrcmpiW(name, L"ProcessorSpeed"))
327 {
328 DWORD cb = sizeof(DWORD);
329 V_VT(ret) = VT_EMPTY;
330 if (RegGetValueW(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\CentralProcessor\\0",
331 L"~Mhz", RRF_RT_REG_DWORD, NULL, &V_UI4(ret), &cb))
332 {
333 return S_FALSE;
334 }
335 V_VT(ret) = VT_I4;
336 return S_OK;
337 }
338 else if (!lstrcmpiW(name, L"PhysicalMemoryInstalled"))
339 {
340 MEMORYSTATUSEX mems;
341 mems.dwLength = sizeof(mems);
343 V_VT(ret) = VT_UI8;
344 V_UI8(ret) = mems.ullTotalPhys;
345 return S_OK;
346 }
347
348 UINT os = 0;
349 if (!lstrcmpiW(name, L"IsOS_Professional"))
350 os = OS_PROFESSIONAL;
351 else if (!lstrcmpiW(name, L"IsOS_Personal"))
352 os = OS_HOME;
353 else if (!lstrcmpiW(name, L"IsOS_DomainMember"))
354 os = OS_DOMAINMEMBER;
355 if (os)
356 {
357 V_VT(ret) = VT_BOOL;
358 V_BOOL(ret) = IsOS(os) ? VARIANT_TRUE : VARIANT_FALSE;
359 return S_OK;
360 }
361
362 return E_NOTIMPL;
363}
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
@ VT_UI8
Definition: compat.h:2315
@ VT_I4
Definition: compat.h:2298
@ VT_EMPTY
Definition: compat.h:2295
VOID WINAPI GetSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
Definition: sysinfo.c:143
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned int UINT
Definition: sysinfo.c:13
BOOL NTAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer)
Definition: heapmem.c:1272
static SYSTEM_INFO si
Definition: virtual.c:39
#define DWORD
Definition: nt_native.h:44
#define V_UI4(A)
Definition: oleauto.h:270
#define V_UI8(A)
Definition: oleauto.h:272
#define OS_PROFESSIONAL
Definition: shlwapi.h:246
#define OS_DOMAINMEMBER
Definition: shlwapi.h:254
#define OS_HOME
Definition: shlwapi.h:245
WORD wProcessorArchitecture
Definition: winbase.h:894
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define RRF_RT_REG_DWORD
Definition: winreg.h:61

◆ Help()

HRESULT STDMETHODCALLTYPE CShellDispatch::Help ( )
override

Definition at line 227 of file CShellDispatch.cpp.

228{
229 TRACE("(%p)\n", this);
231}
#define TRAYCMD_HELP_AND_SUPPORT
Definition: undocshell.h:1012

◆ Initialize()

HRESULT CShellDispatch::Initialize ( )

Definition at line 33 of file CShellDispatch.cpp.

34{
35 return S_OK;
36}

◆ IsRestricted()

HRESULT STDMETHODCALLTYPE CShellDispatch::IsRestricted ( BSTR  group,
BSTR  restriction,
LONG value 
)
override

Definition at line 267 of file CShellDispatch.cpp.

268{
269 TRACE("(%p, %ls, %ls, %p)\n", this, group, restriction, value);
270
271 if (!value)
272 return E_INVALIDARG;
273 *value = SHGetRestriction(NULL, group, restriction);
274 return S_OK;
275}
EXTERN_C DWORD WINAPI SHGetRestriction(LPCWSTR lpSubKey, LPCWSTR lpSubName, LPCWSTR lpValue)
Definition: ordinal.c:2357
GLboolean GLuint group
Definition: glext.h:11120

◆ IsServiceRunning()

HRESULT STDMETHODCALLTYPE CShellDispatch::IsServiceRunning ( BSTR  service,
VARIANT running 
)
override

Definition at line 443 of file CShellDispatch.cpp.

444{
446 SC_HANDLE scm, service;
447 DWORD dummy;
448
449 TRACE("(%s, %p)\n", debugstr_w(name), running);
450
451 V_VT(running) = VT_BOOL;
452 V_BOOL(running) = VARIANT_FALSE;
453
455 if (!scm)
456 {
457 ERR("failed to connect to service manager\n");
458 return S_OK;
459 }
460
461 service = OpenServiceW(scm, name, SERVICE_QUERY_STATUS);
462 if (!service)
463 {
464 ERR("Failed to open service %s (%u)\n", debugstr_w(name), GetLastError());
466 return S_OK;
467 }
468
470 sizeof(SERVICE_STATUS_PROCESS), &dummy))
471 {
472 TRACE("failed to query service status (%u)\n", GetLastError());
473 CloseServiceHandle(service);
475 return S_OK;
476 }
477
478 if (status.dwCurrentState == SERVICE_RUNNING)
479 V_BOOL(running) = VARIANT_TRUE;
480
481 CloseServiceHandle(service);
483
484 return S_OK;
485}
#define ERR(fmt,...)
Definition: precomp.h:57
#define debugstr_w
Definition: kernel32.h:32
#define SERVICE_QUERY_STATUS
Definition: winsvc.h:61
@ SC_STATUS_PROCESS_INFO
Definition: winsvc.h:125
#define SC_MANAGER_CONNECT
Definition: winsvc.h:14
#define SERVICE_RUNNING
Definition: winsvc.h:24
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
Definition: scm.c:2107
BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
Definition: scm.c:2926
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
Definition: scm.c:2199
Definition: ps.c:97
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
unsigned char BYTE
Definition: xxhash.c:193

◆ MinimizeAll()

HRESULT STDMETHODCALLTYPE CShellDispatch::MinimizeAll ( )
override

Definition at line 161 of file CShellDispatch.cpp.

162{
163 TRACE("(%p)\n", this);
165}
#define TRAYCMD_MINIMIZE_ALL
Definition: undocshell.h:1006

◆ NameSpace()

HRESULT STDMETHODCALLTYPE CShellDispatch::NameSpace ( VARIANT  vDir,
Folder **  ppsdf 
)
override

Definition at line 65 of file CShellDispatch.cpp.

66{
67 TRACE("(%p, %s, %p)\n", this, debugstr_variant(&vDir), ppsdf);
68 if (!ppsdf)
69 return E_POINTER;
70 *ppsdf = NULL;
71 HRESULT hr;
72
73 if (V_VT(&vDir) == VT_I2)
74 {
75 hr = VariantChangeType(&vDir, &vDir, 0, VT_I4);
77 return hr;
78 }
79
81 hr = VariantToIdlist(&vDir, &idlist);
82 if (!SUCCEEDED(hr))
83 return S_FALSE;
84
85 return ShellObjectCreatorInit<CFolder>(static_cast<LPITEMIDLIST>(idlist), IID_PPV_ARG(Folder, ppsdf));
86}
@ VT_I2
Definition: compat.h:2297
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
Definition: variant.c:962
#define E_POINTER
Definition: winerror.h:3480

◆ Open()

HRESULT STDMETHODCALLTYPE CShellDispatch::Open ( VARIANT  vDir)
override

Definition at line 149 of file CShellDispatch.cpp.

150{
151 TRACE("(%p, %s)\n", this, debugstr_variant(&vDir));
152 return OpenFolder(vDir);
153}

◆ RefreshMenu()

HRESULT STDMETHODCALLTYPE CShellDispatch::RefreshMenu ( )
override

Definition at line 245 of file CShellDispatch.cpp.

246{
247 TRACE("(%p)\n", this);
249 // According to https://learn.microsoft.com/en-us/windows/win32/shell/ishelldispatch-refreshmenu
250 // only systems preceding Windows XP refreshes the contents of the Start menu when this is called.
252}
#define C_ASSERT(e)
Definition: intsafe.h:73
#define FCIDM_CABINET_REFRESH
Definition: shlobj_undoc.h:102
#define TRAYCMD_REFRESH_MENU
Definition: undocshell.h:1021

◆ ServiceStart()

HRESULT STDMETHODCALLTYPE CShellDispatch::ServiceStart ( BSTR  service,
VARIANT  persistent,
VARIANT ret 
)
override

Definition at line 423 of file CShellDispatch.cpp.

424{
425 TRACE("(%p, %ls, %s, %p)\n", this, service, wine_dbgstr_variant(&persistent), ret);
426
427 HRESULT hr = SHELL32_ControlService(service, 0, persistent);
428 V_VT(ret) = VT_BOOL;
429 V_BOOL(ret) = (hr == S_OK ? VARIANT_TRUE : VARIANT_FALSE);
430 return hr == S_OK ? S_OK : S_FALSE;
431}
static HRESULT SHELL32_ControlService(BSTR name, DWORD control, VARIANT &persistent)

◆ ServiceStop()

HRESULT STDMETHODCALLTYPE CShellDispatch::ServiceStop ( BSTR  service,
VARIANT  persistent,
VARIANT ret 
)
override

Definition at line 433 of file CShellDispatch.cpp.

434{
435 TRACE("(%p, %ls, %s, %p)\n", this, service, wine_dbgstr_variant(&persistent), ret);
436
438 V_VT(ret) = VT_BOOL;
439 V_BOOL(ret) = (hr == S_OK ? VARIANT_TRUE : VARIANT_FALSE);
440 return hr == S_OK ? S_OK : S_FALSE;
441}
#define SERVICE_CONTROL_STOP
Definition: winsvc.h:42

◆ SetInterfaceSafetyOptions()

HRESULT STDMETHODCALLTYPE CShellDispatch::SetInterfaceSafetyOptions ( REFIID  riid,
DWORD  dwOptionSetMask,
DWORD  dwEnabledOptions 
)
override

Implements IObjectSafety.

Definition at line 577 of file CShellDispatch.cpp.

578{
579 TRACE("(%p, %s, %lu, %lu)\n", this, wine_dbgstr_guid(&riid), dwOptionSetMask, dwEnabledOptions);
580 return E_NOTIMPL;
581}

◆ SetSite()

HRESULT STDMETHODCALLTYPE CShellDispatch::SetSite ( IUnknown pUnkSite)
override

Implements IObjectWithSite.

Definition at line 585 of file CShellDispatch.cpp.

586{
587 TRACE("(%p, %p)\n", this, pUnkSite);
588 return E_NOTIMPL;
589}

◆ SetTime()

HRESULT STDMETHODCALLTYPE CShellDispatch::SetTime ( )
override

Definition at line 215 of file CShellDispatch.cpp.

216{
217 TRACE("(%p)\n", this);
219}
#define TRAYCMD_DATE_AND_TIME
Definition: undocshell.h:1002

◆ ShellExecute()

HRESULT STDMETHODCALLTYPE CShellDispatch::ShellExecute ( BSTR  file,
VARIANT  args,
VARIANT  dir,
VARIANT  op,
VARIANT  show 
)
override

Definition at line 277 of file CShellDispatch.cpp.

278{
279 CComVariant args_str, dir_str, op_str, show_int;
280 WCHAR *args = NULL, *dir = NULL, *op = NULL;
281 INT show = SW_SHOW;
283
284 TRACE("(%s, %s, %s, %s, %s)\n", debugstr_w(file), debugstr_variant(&v_args),
285 debugstr_variant(&v_dir), debugstr_variant(&v_op), debugstr_variant(&v_show));
286
287 args_str.ChangeType(VT_BSTR, &v_args);
288 if (V_VT(&args_str) == VT_BSTR)
289 args = V_BSTR(&args_str);
290
291 dir_str.ChangeType(VT_BSTR, &v_dir);
292 if (V_VT(&dir_str) == VT_BSTR)
293 dir = V_BSTR(&dir_str);
294
295 op_str.ChangeType(VT_BSTR, &v_op);
296 if (V_VT(&op_str) == VT_BSTR)
297 op = V_BSTR(&op_str);
298
299 show_int.ChangeType(VT_I4, &v_show);
300 if (V_VT(&show_int) == VT_I4)
301 show = V_I4(&show_int);
302
303 ret = ShellExecuteW(NULL, op, file, args, dir, show);
304
305 return (ULONG_PTR)ret > 32 ? S_OK : S_FALSE;
306}
unsigned int dir
Definition: maze.c:112
HRESULT ChangeType(_In_ VARTYPE newType, _In_opt_ const LPVARIANT src=NULL)
Definition: atlcomcli.h:589
UINT op
Definition: effect.c:236
@ VT_BSTR
Definition: compat.h:2303
const char * op_str
Definition: compile.c:90
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_I4(A)
Definition: oleauto.h:247
short WCHAR
Definition: pedump.c:58
Definition: match.c:390
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define SW_SHOW
Definition: winuser.h:786

◆ ShowBrowserBar()

HRESULT STDMETHODCALLTYPE CShellDispatch::ShowBrowserBar ( BSTR  clsid,
VARIANT  show,
VARIANT ret 
)
override

Definition at line 500 of file CShellDispatch.cpp.

501{
502 TRACE("(%p, %ls, %s, %p)\n", this, clsid, wine_dbgstr_variant(&show), ret);
503 return E_NOTIMPL;
504}
const CLSID * clsid
Definition: msctf.cpp:50

◆ ShutdownWindows()

HRESULT STDMETHODCALLTYPE CShellDispatch::ShutdownWindows ( )
override

Definition at line 197 of file CShellDispatch.cpp.

198{
200 return S_OK;
201}
void WINAPI ExitWindowsDialog(HWND hWndOwner)
Definition: dialogs.cpp:1604

◆ Suspend()

HRESULT STDMETHODCALLTYPE CShellDispatch::Suspend ( )
override

Definition at line 203 of file CShellDispatch.cpp.

204{
205 TRACE("(%p)\n", this);
207}
#define TRAYCMD_SUSPEND
Definition: undocshell.h:1003

◆ TileHorizontally()

HRESULT STDMETHODCALLTYPE CShellDispatch::TileHorizontally ( )
override

Definition at line 191 of file CShellDispatch.cpp.

192{
193 TRACE("(%p)\n", this);
195}
#define TRAYCMD_TILE_H
Definition: undocshell.h:999

◆ TileVertically()

HRESULT STDMETHODCALLTYPE CShellDispatch::TileVertically ( )
override

Definition at line 185 of file CShellDispatch.cpp.

186{
187 TRACE("(%p)\n", this);
189}
#define TRAYCMD_TILE_V
Definition: undocshell.h:1000

◆ ToggleDesktop()

HRESULT STDMETHODCALLTYPE CShellDispatch::ToggleDesktop ( )
override

Definition at line 530 of file CShellDispatch.cpp.

531{
532 TRACE("(%p)\n", this);
534}
#define TRAYCMD_TOGGLE_DESKTOP
Definition: undocshell.h:1001

◆ TrayProperties()

HRESULT STDMETHODCALLTYPE CShellDispatch::TrayProperties ( )
override

Definition at line 221 of file CShellDispatch.cpp.

222{
223 TRACE("(%p)\n", this);
225}
#define TRAYCMD_TASKBAR_PROPERTIES
Definition: undocshell.h:1005

◆ UndoMinimizeALL()

HRESULT STDMETHODCALLTYPE CShellDispatch::UndoMinimizeALL ( )
override

Definition at line 167 of file CShellDispatch.cpp.

168{
169 TRACE("(%p)\n", this);
171}
#define TRAYCMD_RESTORE_ALL
Definition: undocshell.h:1007

◆ Windows()

HRESULT STDMETHODCALLTYPE CShellDispatch::Windows ( IDispatch **  ppid)
override

Definition at line 116 of file CShellDispatch.cpp.

117{
118 TRACE("(%p, %p)\n", this, ppid);
119 return CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARG(IDispatch, ppid));
120}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685

◆ WindowsSecurity()

HRESULT STDMETHODCALLTYPE CShellDispatch::WindowsSecurity ( )
override

Definition at line 524 of file CShellDispatch.cpp.

525{
526 TRACE("(%p)\n", this);
528}
#define IDM_SECURITY
Definition: resource.h:73

The documentation for this class was generated from the following files: