diff --git a/dll/win32/shell32/folders/CPrinterFolder.cpp b/dll/win32/shell32/folders/CPrinterFolder.cpp index 8d9553117f6..2b55d762868 100644 --- a/dll/win32/shell32/folders/CPrinterFolder.cpp +++ b/dll/win32/shell32/folders/CPrinterFolder.cpp @@ -323,6 +323,21 @@ HRESULT WINAPI CPrinterFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY return hr; } +HRESULT CPrinterFolder::_AssocCreate(REFIID riid, PVOID *ppvObj) +{ + IQueryAssociations *pAssoc; + HRESULT hr = ::AssocCreate(CLSID_QueryAssociations, IID_PPV_ARG(IQueryAssociations, &pAssoc)); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + hr = pAssoc->Init(ASSOCF_NONE, L"Printers", NULL, NULL); + if (SUCCEEDED(hr)) + hr = pAssoc->QueryInterface(riid, ppvObj); + + pAssoc->Release(); + return hr; +} + /************************************************************************** * CPrinterFolder::GetUIObjectOf * @@ -351,6 +366,8 @@ HRESULT WINAPI CPrinterFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMI if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID(riid, IID_IExtractIconW)) && cidl == 1) hr = CPrintersExtractIconW_CreateInstane(apidl[0], riid, &pObj); + else if (IsEqualIID(riid, IID_IQueryAssociations)) + hr = _AssocCreate(riid, &pObj); else hr = E_NOINTERFACE; diff --git a/dll/win32/shell32/folders/CPrinterFolder.h b/dll/win32/shell32/folders/CPrinterFolder.h index 57a2fda40cb..6f22ea74a5d 100644 --- a/dll/win32/shell32/folders/CPrinterFolder.h +++ b/dll/win32/shell32/folders/CPrinterFolder.h @@ -32,10 +32,11 @@ class CPrinterFolder : { private: CLSID *pclsid; - LPITEMIDLIST pidlRoot; /* absolute pidl */ - int dwAttributes; /* attributes returned by GetAttributesOf FIXME: use it */ + + HRESULT _AssocCreate(REFIID riid, PVOID *ppvObj); + public: CPrinterFolder(); ~CPrinterFolder();