Как получить статус принтера в WPF? - PullRequest
1 голос
/ 30 декабря 2011

Вот как я распечатываю свой потоковый документ:

PrintDialog pd = new PrintDialog();
LocalPrintServer local = new LocalPrintServer();
PrintQueue pq = local.DefaultPrintQueue;//GetPrintQueue("[Printer Name]"); //e.g. local.GetPrintQueue("Microsoft XPS Document Writer");
pd.PrintQueue = pq;
PrintTicket pt = pq.DefaultPrintTicket;
pt.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA5);// or we can specify the custom size(width, height) here
pd.PrintTicket = pt;
pt.PageBorderless = PageBorderless.Borderless;
pt.PageOrientation = PageOrientation.ReversePortrait;
PrintCapabilities capabilities = pd.PrintQueue.GetPrintCapabilities(pd.PrintTicket);
double sizeWidth = capabilities.PageImageableArea.ExtentWidth;
double sizeHeight = capabilities.PageImageableArea.ExtentHeight;
var fd = new FlowDocument();

DocumentPaginator sd = ((IDocumentPaginatorSource)fd).DocumentPaginator;
sd.PageSize = new Size(sizeWidth + 20, sizeHeight);
pd.PrintDocument(sd, "My Doc");
// GET THE PRINTER STATUS IN MESSAGE BOX HERE..
 MessageBox.Show(printerStatus());  // printerStatus() is a pseudo method to retrieve the status of the printer.

Как узнать текущее состояние принтера, чтобы он выводил сообщение «Печать», «Нет бумаги», «Замятие бумаги», «Принтер отключен» и т. Д.????

После поиска я наткнулся на эту страницу: http://msdn.microsoft.com/en-us/library/system.printing.printqueuestatus.aspx

Однако я не имею ни малейшего представления о его использовании.Можете ли вы помочь мне разобраться с этим?

Этот процесс печати выполняется в потоке STA.

1 Ответ

2 голосов
/ 30 декабря 2011

вы можете проверить вот так

using System.Management;

class PrinterOffline
{
    private static void Main(string[] args)
    {
          // Set management scope
          ManagementScope scope = new ManagementScope("\\root\\cimv2");
          scope.Connect();

         // Select Printers from WMI Object Collections
         ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");
         string printerName = "";
         foreach (ManagementObject printer in searcher.Get()) 
         {
            printerName = printer("Name").ToString().ToLower();
            if (printerName.Equals("Name_Of_Printer")) 
            {
                Console.WriteLine("Printer = " + printer("Name"));
                if (printer("WorkOffline").ToString().ToLower().Equals("true"))
                {
                      // printer is offline by user
                      Console.WriteLine("Your Plug-N-Play printer is not connected.");
                }
                else 
                {
                     // printer is not offline
                      Console.WriteLine("Your Plug-N-Play printer is connected.");
                }
            }
        }
    }
}

Просьба перейти по этой ссылке для получения дополнительной информации о состоянии принтера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...