[BROWSEUI][PSDK] Stubplement UserAssist 3309/head
authorOleg Dubinskiy <oleg.dubinskij2013@yandex.ua>
Wed, 21 Oct 2020 14:46:09 +0000 (17:46 +0300)
committerStanislav Motylkov <x86corez@gmail.com>
Sun, 20 Dec 2020 14:32:11 +0000 (17:32 +0300)
Initial implementation of `CUserAssist` class, which contains `IUserAssist` interface.
See https://www.geoffchappell.com/studies/windows/ie/browseui/classes/userassist.htm.
Required by MS shell32.dll.

CORE-17345 CORE-17393

dll/win32/browseui/CMakeLists.txt
dll/win32/browseui/CUserAssist.cpp [new file with mode: 0644]
dll/win32/browseui/CUserAssist.h [new file with mode: 0644]
dll/win32/browseui/browseui.cpp
dll/win32/browseui/browseui.rc
dll/win32/browseui/precomp.h
dll/win32/browseui/res/userassist.rgs [new file with mode: 0644]
dll/win32/browseui/resource.h
sdk/include/psdk/shlguid.h
sdk/include/psdk/shobjidl.idl

index 8cb68cf..eb7070d 100644 (file)
@@ -31,7 +31,9 @@ list(APPEND SOURCE
     toolsband.cpp
     travellog.cpp
     utility.cpp
-    CProgressDialog.cpp)
+    CProgressDialog.cpp
+    CUserAssist.cpp
+    CUserAssist.h)
 
 list(APPEND PCH_SKIP_SOURCE
     dllinstall.c)
diff --git a/dll/win32/browseui/CUserAssist.cpp b/dll/win32/browseui/CUserAssist.cpp
new file mode 100644 (file)
index 0000000..54e6db7
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * PROJECT:     ReactOS browseui
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     IUserAssist implementation
+ * COPYRIGHT:   Copyright 2020 Oleg Dubinskiy (oleg.dubinskij2013@yandex.ua)
+ */
+// See http://www.geoffchappell.com/studies/windows/ie/browseui/interfaces/iuserassist.htm
+
+#include "precomp.h"
+
+CUserAssist::CUserAssist()
+{
+}
+
+CUserAssist::~CUserAssist()
+{
+}
+
+// *** IUserAssist methods ***
+STDMETHODIMP CUserAssist::FireEvent(GUID const *guid, INT param1, ULONG param2, WPARAM wparam, LPARAM lparam)
+{
+    TRACE("(%u, %d, %d, %p, %p)\n", this, guid, param1, param2, wparam, lparam);
+    return E_NOTIMPL;
+}
+
+STDMETHODIMP CUserAssist::QueryEvent(GUID const *guid, INT param, WPARAM wparam, LPARAM lparam, PVOID ptr)
+{
+    TRACE("(%u, %d, %p, %p, %p)\n", this, guid, param, wparam, lparam, ptr);
+    return E_NOTIMPL;
+}
+
+STDMETHODIMP CUserAssist::SetEvent(GUID const *guid, INT param, WPARAM wparam, LPARAM lparam, PVOID ptr)
+{
+    TRACE("(%u, %d, %p, %p, %p)\n", this, guid, param, wparam, lparam, ptr);
+    return E_NOTIMPL;
+}
+
+STDMETHODIMP CUserAssist::Enable(BOOL bEnable)
+{
+    TRACE("(%d)\n", this, bEnable);
+    return E_NOTIMPL;
+}
diff --git a/dll/win32/browseui/CUserAssist.h b/dll/win32/browseui/CUserAssist.h
new file mode 100644 (file)
index 0000000..88bdf69
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * PROJECT:     ReactOS browseui
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     IUserAssist implementation
+ * COPYRIGHT:   Copyright 2020 Oleg Dubinskiy (oleg.dubinskij2013@yandex.ua)
+ */
+// See https://www.geoffchappell.com/studies/windows/ie/browseui/classes/userassist.htm
+
+#pragma once
+
+class CUserAssist :
+    public CComCoClass<CUserAssist, &CLSID_UserAssist>,
+    public CComObjectRootEx<CComMultiThreadModelNoCS>,
+    public IUserAssist
+{
+private:
+public:
+    CUserAssist();
+    ~CUserAssist();
+
+    // *** IUserAssist methods ***
+    STDMETHODIMP FireEvent(GUID const *guid, INT param1, ULONG param2, WPARAM wparam, LPARAM lparam);
+    // FIXME: PVOID should point to undocumented UEMINFO structure.
+    STDMETHODIMP QueryEvent(GUID const *guid, INT param, WPARAM wparam, LPARAM lparam, PVOID ptr);
+    STDMETHODIMP SetEvent(GUID const *guid, INT param, WPARAM wparam, LPARAM lparam, PVOID ptr);
+    STDMETHODIMP Enable(BOOL bEnable);
+
+public:
+
+    DECLARE_REGISTRY_RESOURCEID(IDR_USERASSIST)
+    DECLARE_NOT_AGGREGATABLE(CUserAssist)
+
+    DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+    BEGIN_COM_MAP(CUserAssist)
+        COM_INTERFACE_ENTRY_IID(IID_IUserAssist, IUserAssist)
+    END_COM_MAP()
+};
index 8ae993d..7051e24 100644 (file)
@@ -156,6 +156,7 @@ OBJECT_ENTRY(CLSID_FileSearchBand, CSearchBar)
 OBJECT_ENTRY(CLSID_ProgressDialog, CProgressDialog)
 OBJECT_ENTRY(CLSID_ISFBand, CISFBand)
 OBJECT_ENTRY(CLSID_FindFolder, CFindFolder)
+OBJECT_ENTRY(CLSID_UserAssist, CUserAssist)
 END_OBJECT_MAP()
 
 CBrowseUIModule                             gModule;
index 0d43f1c..4ff0755 100644 (file)
@@ -50,6 +50,7 @@ IDR_ACLCUSTOMMRU REGISTRY "res/custommru.rgs"
 IDR_TASKBARLIST REGISTRY "res/taskbarlist.rgs"
 IDR_FILESEARCHBAND REGISTRY "res/filesearchband.rgs"
 IDR_FINDFOLDER REGISTRY "res/findfolder.rgs"
+IDR_USERASSIST REGISTRY "res/userassist.rgs"
 
 #include <reactos/manifest_dll.rc>
 
index f119847..27ce544 100644 (file)
@@ -57,6 +57,7 @@
 #include "CTaskbarList.h"
 #include "explorerband.h"
 #include "CProgressDialog.h"
+#include "CUserAssist.h"
 #include "browseui.h"
 #include <stdio.h>
 
diff --git a/dll/win32/browseui/res/userassist.rgs b/dll/win32/browseui/res/userassist.rgs
new file mode 100644 (file)
index 0000000..eaede08
--- /dev/null
@@ -0,0 +1,13 @@
+HKCR
+{
+       NoRemove CLSID
+       {
+               ForceRemove {DD313E04-FEFF-11D1-8ECD-0000F87A470C} = s 'User assistance'
+               {
+                       InprocServer32 = s '%MODULE%'
+                       {
+                               val ThreadingModel = s 'Both'
+                       }
+               }
+       }
+}
index 84269b6..ecb6b0a 100644 (file)
 #define IDR_TASKBARLIST          145
 #define IDR_FILESEARCHBAND       146
 #define IDR_FINDFOLDER           147
+#define IDR_USERASSIST           148
 
 #define IDS_SMALLICONS           12301
 #define IDS_LARGEICONS           12302
index 25937b0..9272011 100644 (file)
@@ -104,6 +104,8 @@ DEFINE_GUID(CLSID_ACListISF,      0x03c036f1, 0xa186, 0x11d0, 0x82, 0x4a, 0x00,
 DEFINE_GUID(CLSID_ACLMRU,         0x6756a641, 0xde71, 0x11d0, 0x83, 0x1b, 0x00, 0xaa, 0x00, 0x5b, 0x43, 0x83);
 DEFINE_GUID(CLSID_ACLCustomMRU,   0x6935db93, 0x21e8, 0x4ccc, 0xbe, 0xb9, 0x9f, 0xe3, 0xc7, 0x7a, 0x29, 0x7a);
 
+DEFINE_GUID(CLSID_UserAssist,     0xdd313e04, 0xfeff, 0x11d1, 0x8e, 0xcd, 0x00, 0x00, 0xf8, 0x7a, 0x47, 0x0c);
+
 #define SID_SInternetExplorer IID_IWebBrowserApp
 #define SID_SWebBrowserApp    IID_IWebBrowserApp
 #define SID_SWebBrowserEventsService IID_IWebBrowserEventsService
index 4d5d278..cbb9892 100644 (file)
@@ -4768,4 +4768,40 @@ interface IItemNameLimits : IUnknown
         [out] int *piMaxNameLen);
 };
 
+/*****************************************************************************
+ * IUserAssist interface
+ */
+[
+    uuid(dd313e05-feff-11d1-8ecd-0000f87a470c),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface IUserAssist : IUnknown
+{
+    HRESULT FireEvent(
+        GUID const *guid,
+        INT param1,
+        ULONG param2,
+        WPARAM wparam,
+        LPARAM lparam);
+
+    HRESULT QueryEvent(
+        GUID const *guid,
+        INT param,
+        WPARAM wparam,
+        LPARAM lparam,
+        PVOID ptr);
+
+    HRESULT SetEvent(
+        GUID const *guid,
+        INT param,
+        WPARAM wparam,
+        LPARAM lparam,
+        PVOID ptr);
+
+    HRESULT Enable(
+        BOOL bEnable);
+};
+
 #endif // __REACTOS__