ReactOS 0.4.17-dev-573-g8315b8c
CFolderItems.cpp File Reference
#include "precomp.h"
#include "prop.h"
Include dependency graph for CFolderItems.cpp:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
HRESULT SHELL_InvokeCommandOnContextMenu (_In_opt_ HWND hWnd, _In_ IContextMenu *pCM, _In_opt_ PCWSTR pszVerb, _In_ UINT cVerbs, _In_opt_ PCWSTR pszArgs, _In_ UINT fCMIC, _In_ UINT fCMF, _In_opt_ IUnknown *pSite)
 
static HRESULT GetUIObjectOfFolderItems (FolderItems *pFI, REFIID riid, void **ppv)
 

Function Documentation

◆ GetUIObjectOfFolderItems()

static HRESULT GetUIObjectOfFolderItems ( FolderItems *  pFI,
REFIID  riid,
void **  ppv 
)
inlinestatic

Definition at line 72 of file CFolderItems.cpp.

73{
74 VARIANT v;
75 V_VT(&v) = VT_DISPATCH;
76 V_DISPATCH(&v) = static_cast<IDispatch*>(pFI);
78}
static HRESULT GetUIObjectFromVariant(VARIANT &vItem, REFIID riid, void **ppv)
Definition: CFolder.cpp:179
@ VT_DISPATCH
Definition: compat.h:2304
const GLdouble * v
Definition: gl.h:2040
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define V_VT(A)
Definition: oleauto.h:211
#define V_DISPATCH(A)
Definition: oleauto.h:239

Referenced by CFolderItems::get_Verbs(), and CFolderItems::InvokeVerbEx().

◆ SHELL_InvokeCommandOnContextMenu()

HRESULT SHELL_InvokeCommandOnContextMenu ( _In_opt_ HWND  hWnd,
_In_ IContextMenu pCM,
_In_opt_ PCWSTR  pszVerb,
_In_ UINT  cVerbs,
_In_opt_ PCWSTR  pszArgs,
_In_ UINT  fCMIC,
_In_ UINT  fCMF,
_In_opt_ IUnknown pSite 
)

Definition at line 13 of file CFolderItems.cpp.

15{
16 // Note: We can't use SHLWAPI::SHInvokeCommandOnContextMenu because it does not have an arguments parameter
17 if (!pCM)
18 return E_INVALIDARG;
19
20 HRESULT hr = S_OK;
21 int iDefItem = 0;
22 HMENU hMenu = NULL;
24 CMINVOKECOMMANDINFOEX ici = { sizeof(ici), fCMIC, hWnd, NULL, NULL, NULL, SW_SHOWNORMAL };
25 CHAR szVerb[MAX_PATH], szArgs[MAX_PATH * 3];
26
27 if (pSite)
28 IUnknown_SetSite(pCM, pSite);
29
30 if (IS_INTRESOURCE(pszVerb))
31 {
32 ici.lpVerb = MAKEINTRESOURCEA(pszVerb);
33 if (!cVerbs)
34 {
35 hMenu = CreatePopupMenu();
36 if (hMenu)
37 {
38 hr = pCM->QueryContextMenu(hMenu, 0, 1, MAXSHORT, fCMF | CMF_DEFAULTONLY);
39 if ((iDefItem = GetMenuDefaultItem(hMenu, 0, 0)) != -1)
40 ici.lpVerb = MAKEINTRESOURCEA(iDefItem - 1);
41 }
42 }
43 ici.lpVerbW = MAKEINTRESOURCEW(ici.lpVerb);
44 }
45 else
46 {
47 ici.fMask |= CMIC_MASK_UNICODE;
48 ici.lpVerbW = pszVerb;
49 if (pszVerb && SHUnicodeToAnsi(pszVerb, szVerb, _countof(szVerb)))
50 ici.lpVerb = szVerb;
51 }
52
53 if (pszArgs)
54 {
55 ici.fMask |= CMIC_MASK_UNICODE;
56 ici.lpParametersW = pszArgs;
57 if (pszArgs && SHUnicodeToAnsi(pszArgs, szArgs, _countof(szArgs)))
58 ici.lpParameters = szArgs;
59 }
60
61 SetCursor(hOldCursor);
62
63 if (!FAILED_UNEXPECTEDLY(hr) && (iDefItem != -1 || ici.lpVerbW))
64 hr = pCM->InvokeCommand((LPCMINVOKECOMMANDINFO)&ici);
65 if (pSite)
67 if (hMenu)
68 DestroyMenu(hMenu);
69 return hr;
70}
HWND hWnd
Definition: settings.c:17
#define E_INVALIDARG
Definition: ddrawi.h:101
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define MAX_PATH
Definition: compat.h:34
#define IS_INTRESOURCE(x)
Definition: loader.c:613
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
Definition: main.c:1756
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: main.c:222
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
#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:60
char CHAR
Definition: pedump.c:57
#define _countof(array)
Definition: sndvol32.h:70
#define MAXSHORT
Definition: umtypes.h:114
HICON HCURSOR
Definition: windef.h:99
#define SW_SHOWNORMAL
Definition: winuser.h:781
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
UINT WINAPI GetMenuDefaultItem(_In_ HMENU hMenu, _In_ UINT fByPos, _In_ UINT gmdiFlags)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2474
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define IDC_WAIT
Definition: winuser.h:697
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by CFolderItems::InvokeVerbHelper().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )