A test of PKEY_Printer_Status in VB =>
Dim FOLDERID_PrintersFolder As Guid = New Guid("76FC4E2D-D6AD-4519-A663-37BD56068185")
Dim psi As IntPtr = IntPtr.Zero
Dim hr As HRESULT = SHGetKnownFolderItem(FOLDERID_PrintersFolder, KNOWN_FOLDER_FLAG.KF_FLAG_DEFAULT, IntPtr.Zero, GetType(IShellItem).GUID, psi)
If (hr = HRESULT.S_OK) Then
Dim pShellItemFolder As IShellItem = CType(Marshal.GetObjectForIUnknown(psi), IShellItem)
Dim BHID_EnumItems As New Guid("94f60519-2850-4924-aa5a-d15e84868039")
Dim pEnumItemsPtr As IntPtr = IntPtr.Zero
hr = pShellItemFolder.BindToHandler(IntPtr.Zero, BHID_EnumItems, GetType(IEnumShellItems).GUID, pEnumItemsPtr)
If (hr = HRESULT.S_OK) Then
Dim pEnumShellItems As IEnumShellItems = CType(Marshal.GetObjectForIUnknown(pEnumItemsPtr), IEnumShellItems)
Dim nFetched As UInteger = 0
Dim pShellItem As IShellItem = Nothing
Dim nCpt = 1
While ((HRESULT.S_OK = pEnumShellItems.Next(1, pShellItem, nFetched)) AndAlso (nFetched = 1))
Dim sbDisplayName As Text.StringBuilder = New Text.StringBuilder(260)
hr = pShellItem.GetDisplayName(SIGDN.SIGDN_NORMALDISPLAY, sbDisplayName)
If (hr = HRESULT.S_OK) Then
Console.WriteLine(String.Format("Printer n° {0} : {1}", nCpt.ToString(), sbDisplayName.ToString()))
Dim pShellItem2 As IShellItem2 = DirectCast(pShellItem, IShellItem2)
Dim sModel As String = Nothing
hr = pShellItem2.GetString(PKEY_Printer_Model, sModel)
If (hr = HRESULT.S_OK) Then
Console.WriteLine(String.Format(vbTab + "Model : {0}", sModel))
Dim sStatus As String = Nothing
hr = pShellItem2.GetString(PKEY_Printer_Status, sStatus)
If (hr = HRESULT.S_OK) Then
Console.WriteLine(String.Format(vbTab + "Status : {0}", sStatus))
End If
End If
End If
'Marshal.ReleaseComObject(pShellItem)
nCpt += 1
End While
Marshal.ReleaseComObject(pShellItem)
Marshal.ReleaseComObject(pEnumShellItems)
End If
Marshal.ReleaseComObject(pShellItemFolder)
End If
with declarations (cannot post here) : IShellItem & IShellItem2