WindowsXP-SP1/shell/shell32/prtprop.c

40 lines
1.3 KiB
C

#include "shellprv.h"
#pragma hdrstop
#include "printer.h"
// PRINTUI.DLL calls this export to load shell exts registered for this printer
STDAPI_(void) Printer_AddPrinterPropPages(LPCTSTR pszPrinterName, LPPROPSHEETHEADER lpsh)
{
// Add hooked pages if they exist in the registry
HKEY hkeyBaseProgID = NULL;
RegOpenKey(HKEY_CLASSES_ROOT, c_szPrinters, &hkeyBaseProgID);
if (hkeyBaseProgID)
{
// we need an IDataObject
LPITEMIDLIST pidl;
HRESULT hr = ParsePrinterNameEx(pszPrinterName, &pidl, TRUE, 0, 0);
if (SUCCEEDED(hr))
{
IDataObject *pdtobj;
hr = SHGetUIObjectFromFullPIDL(pidl, NULL, IID_PPV_ARG(IDataObject, &pdtobj));
if (SUCCEEDED(hr))
{
// add the hooked pages
HDCA hdca = DCA_Create();
if (hdca)
{
DCA_AddItemsFromKey(hdca, hkeyBaseProgID, STRREG_SHEX_PROPSHEET);
DCA_AppendClassSheetInfo(hdca, hkeyBaseProgID, lpsh, pdtobj);
DCA_Destroy(hdca);
}
pdtobj->lpVtbl->Release(pdtobj);
}
ILFree(pidl);
}
RegCloseKey(hkeyBaseProgID);
}
}