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?