我遇到一种情况,尽管打印机处于脱机状态,但重定向的打印机在远程桌面会话上显示为可用打印机。 我想知道是否可以使用C#编码来确定重定向的打印机是脱机还是在线。 我需要排除所有脱机打印机。 如果直接将打印机安装在远程桌面计算机上,则可以确定打印机状态,但是如果使用了远程桌面繁忙的打印驱动程序,则该状态不可用。
我一直在使用System.Printing
类来确定这一点,到目前为止,我还没有运气。
我也尝试过WMI。
[DllImport("winspool.drv", CharSet = CharSet.Unicode,EntryPoint="EnumPrinters", SetLastError = true)]
static extern int Win32EnumPrinters(int Flags, string Name, uint Level, IntPtr pPrinterEnum, uint cbBuf,ref uint pcbNeeded, ref uint pcReturned);
PrintServer ps = new PrintServer(PrintSystemDesiredAccess.AdministrateServer);
PrintQueueCollection pq = ps.GetPrintQueues();
foreach (PrintQueue printQueue in pq)
{
printQueue.Refresh();
//System.Windows.Forms.MessageBox.Show(printQueue.Name+" "+printQueue.IsOutOfPaper + " : Status : "+ printQueue.QueueStatus);
SpotTroubleUsingProperties(ref statusReport, printQueue);
}