https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1d4d88b062c5df08ba8dd…
commit 1d4d88b062c5df08ba8dd082f2c92862db3d0de4
Author: Mark Jansen <mark.jansen(a)reactos.org>
AuthorDate: Thu Dec 28 23:19:52 2017 +0100
Commit: Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Sat Jan 13 23:49:58 2018 +0100
[PSDK][ACTXPROXY] Add IExplorerCommand and related classes (Vista+)
---
dll/win32/actxprxy/usrmarshal.c | 30 ++++++++
sdk/include/psdk/shobjidl.idl | 150 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 180 insertions(+)
diff --git a/dll/win32/actxprxy/usrmarshal.c b/dll/win32/actxprxy/usrmarshal.c
index 850a1e6904..d61a37ec9c 100644
--- a/dll/win32/actxprxy/usrmarshal.c
+++ b/dll/win32/actxprxy/usrmarshal.c
@@ -200,6 +200,36 @@ HRESULT __RPC_STUB IEnumShellItems_Next_Stub(
return hr;
}
+#ifdef __REACTOS__
+
+HRESULT CALLBACK IEnumExplorerCommand_Next_Proxy(
+ IEnumExplorerCommand *This,
+ ULONG celt,
+ IExplorerCommand **pUICommand,
+ ULONG *pceltFetched)
+{
+ ULONG fetched;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, pUICommand, pceltFetched);
+ if (!pceltFetched) pceltFetched = &fetched;
+ return IEnumExplorerCommand_RemoteNext_Proxy(This, celt, pUICommand, pceltFetched);
+}
+
+HRESULT __RPC_STUB IEnumExplorerCommand_Next_Stub(
+ IEnumExplorerCommand *This,
+ ULONG celt,
+ IExplorerCommand **pUICommand,
+ ULONG *pceltFetched)
+{
+ HRESULT hr;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, pUICommand, pceltFetched);
+ *pceltFetched = 0;
+ hr = IEnumExplorerCommand_Next(This, celt, pUICommand, pceltFetched);
+ if (hr == S_OK) *pceltFetched = celt;
+ return hr;
+}
+
+#endif // __REACTOS__
+
HRESULT CALLBACK IModalWindow_Show_Proxy(
IModalWindow *This,
HWND hwndOwner)
diff --git a/sdk/include/psdk/shobjidl.idl b/sdk/include/psdk/shobjidl.idl
index efcf9a362b..a7bbf3d756 100644
--- a/sdk/include/psdk/shobjidl.idl
+++ b/sdk/include/psdk/shobjidl.idl
@@ -2196,6 +2196,156 @@ interface IDefaultExtractIconInit : IUnknown
[in] int iIcon);
}
+
+#ifdef __REACTOS__
+/*****************************************************************************
+ * IExplorerCommand interface (Vista+)
+ */
+
+interface IEnumExplorerCommand;
+
+[
+ uuid(A08CE4D0-FA25-44AB-B57C-C7B1C323E0B9),
+ pointer_default(unique)
+]
+interface IExplorerCommand : IUnknown
+{
+ cpp_quote("// GetIcon(ppszIcon) Receives resource string that identifies icon
source")
+ typedef [v1_enum] enum _EXPCMDSTATE
+ {
+ ECS_ENABLED = 0x000,
+ ECS_DISABLED = 0x001,
+ ECS_HIDDEN = 0x002,
+ ECS_CHECKBOX = 0x004,
+ ECS_CHECKED = 0x008,
+ ECS_RADIOCHECK = 0x010, // Windows 7
+ } EXPCMDSTATE;
+
+ typedef [v1_enum] enum _EXPCMDFLAGS
+ {
+ ECF_DEFAULT = 0x000,
+ ECF_HASSUBCOMMANDS = 0x001,
+ ECF_HASSPLITBUTTON = 0x002,
+ ECF_HIDELABEL = 0x004,
+ ECF_ISSEPARATOR = 0x008,
+ ECF_HASLUASHIELD = 0x010,
+ ECF_SEPARATORBEFORE = 0x020, // Windows 7
+ ECF_SEPARATORAFTER = 0x040, // Windows 7
+ ECF_ISDROPDOWN = 0x080, // Windows 7
+ ECF_TOGGLEABLE = 0x100, // Windows 8
+ ECF_AUTOMENUICONS = 0x200, // Windows 8
+ } EXPCMDFLAGS;
+
+ HRESULT GetTitle(
+ [in, unique] IShellItemArray *psiItemArray,
+ [out, string] LPWSTR *ppszName);
+ HRESULT GetIcon(
+ [in, unique] IShellItemArray *psiItemArray,
+ [out, string] LPWSTR *ppszIcon);
+ HRESULT GetToolTip(
+ [in, unique] IShellItemArray *psiItemArray,
+ [out, string] LPWSTR *ppszInfotip);
+ HRESULT GetCanonicalName(
+ [out] GUID* pguidCommandName);
+ HRESULT GetState(
+ [in] IShellItemArray *psiItemArray,
+ [in] BOOL fOkToBeSlow,
+ [out] EXPCMDSTATE *pCmdState);
+ HRESULT Invoke(
+ [in] IShellItemArray *psiItemArray,
+ [in, unique] IBindCtx *pbc);
+ HRESULT GetFlags(
+ [out] EXPCMDFLAGS *pFlags);
+ HRESULT EnumSubCommands(
+ [out] IEnumExplorerCommand **ppEnum);
+};
+
+
+/*****************************************************************************
+ * IExplorerCommandState interface (Vista+)
+ */
+[
+ object,
+ uuid(BDDACB60-7657-47AE-8445-D23E1ACF82AE),
+ pointer_default(unique)
+]
+interface IExplorerCommandState : IUnknown
+{
+ HRESULT GetState(
+ [in] IShellItemArray *psiItemArray,
+ [in] BOOL fOkToBeSlow,
+ [out] EXPCMDSTATE *pCmdState);
+}
+
+
+/*****************************************************************************
+ * IInitializeCommand interface (Vista+)
+ */
+[
+ object,
+ uuid(85075ACF-231F-40EA-9610-D26B7B58F638),
+ pointer_default(unique)
+]
+interface IInitializeCommand : IUnknown
+{
+ HRESULT Initialize(
+ [in, string] LPCWSTR pszCommandName,
+ [in] IPropertyBag *ppb);
+}
+
+
+/*****************************************************************************
+ * IEnumExplorerCommand interface (Vista+)
+ */
+[
+ object,
+ uuid(A88826F8-186F-4987-AADE-EA0CEF8FBFE8),
+ pointer_default(unique)
+]
+interface IEnumExplorerCommand : IUnknown
+{
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] IExplorerCommand** pUICommand,
+ [out, optional] ULONG *pceltFetched);
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out] IExplorerCommand** pUICommand,
+ [out, optional] ULONG *pceltFetched);
+ HRESULT Skip(
+ [in] ULONG celt);
+ HRESULT Reset();
+ HRESULT Clone(
+ [out] IEnumExplorerCommand **ppenum);
+};
+
+
+/*****************************************************************************
+ * IExplorerCommandProvider interface (Vista+)
+ */
+[
+ uuid(64961751-0835-43C0-8FFE-D57686530E64),
+ pointer_default(unique)
+]
+interface IExplorerCommandProvider : IUnknown
+{
+ cpp_quote("// GetCommands usually creates an IEnumExplorerCommand")
+ cpp_quote("// GetCommand usually creates an IExplorerCommand")
+
+ HRESULT GetCommands(
+ [in] IUnknown *punkSite,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+ HRESULT GetCommand(
+ [in] REFGUID rguidCommandId,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+};
+
+#endif // __REACTOS__
+
/*****************************************************************************
* IDeskBand interface
*/