How to display only network printers when enumerating FOLDERID_NetworkFolder?

101 Views Asked by At

The code below shows all devices, from network devices like network share, media device, printers, etc.

hr = CoInitialize(NULL);
if (FAILED(hr))
{
    printf("CoInitialize error, %x\n", hr);
    return;
}

hr = SHGetKnownFolderItem(FOLDERID_NetworkFolder, KF_FLAG_DEFAULT, NULL, IID_PPV_ARGS(&pShellItem));
if (FAILED(hr))
{
    printf("SHGetKnownFolderItem error, %x\n", hr);
    return;
}

hr = pShellItem->BindToHandler(nullptr, BHID_EnumItems, IID_PPV_ARGS(&pShellEnum));                
if (FAILED(hr))
{
    printf("BindToHandler error, %x\n", hr);
    return;
}

do {
    IShellItem* pItem;
    LPWSTR szName = NULL;
    SFGAOF attributes;

    hr = pShellEnum->Next(1, &pItem, nullptr);
    if (hr == S_OK && pItem)
    {
        hr = pItem->GetDisplayName(SIGDN_NORMALDISPLAY, &szName);
        if (SUCCEEDED(hr) && szName != NULL)
        {   
            wcout << szName << std::endl;
        }        
    }
} while (hr == S_OK);

CoUninitialize();

system("pause");

From this, how can I print only network printers?

0

There are 0 best solutions below