.NetFrameworkでのプリンタ切断検知


現在アプリからプリンタに出力するアプリがあります  
接続切断検知についてなのですが  
LocalPrintServerクラスのGetPrintQueueメソッドからプリンタの状態を取得しているのですが  
取得した状態のうち  
IsOfflineプロパティが常にfalseになってしまいます

USBケーブルを抜き差しすると、デバイスとプリンターのアイコンが  
抜いているときはハーフグレーになるのでOSはプリンタが切れたことを検知しているみたいなのですが  
プログラム上からは常にオンライン(IsOffline=false)となってしまいます(カバーオープンや紙切れは検知するのですが・・・・)

プリンタの接続状態は他に、どのような方法で検知すればいいのでしょうか

今の環境はWindows7/.NetFramework4.5なのですが、Windows8.1やWindows10でも使用できる方法が知りたいです

業務用のプリンタなので最初はそういう仕様なのかと思いましたが、  
デバイスとプリンター上からはちゃんと検知しているので何か標準的な方法が他にあったりするのでしょうか




[Trying to determine printer status always returns 0 for offline & online
printers](https://stackoverflow.com/questions/41437023/trying-to-determine-
printer-status-always-returns-0-for-offline-online-printer "Trying to
determine printer status always returns 0 for offline & online printers")

上記の回答を参考にしましたが、プリンターがオフラインかどうかは、WIN32 API の GetPrinter 関数で得られた、PRINTER_INFO_2
構造体の Attributes の値で判定できるようです。

[PDFを画像に変換する](http://d.hatena.ne.jp/feb-hare/20080713 "PDFを画像に変換する")

上記のページに PRINTER_INFO_2 を取得するコードがありました。  
PRINTER_INFO_2 を取得し、下記のようなコードで指定したプリンターがオンラインかどうか判定ができると思います。

[code]

    PRINTER_INFO_2 printerInfo = GetPrinterInfo("SHARP MX-2610FN SPDL2-c");
    if ((printerInfo.Attributes & PRINTER_ATTRIBUTE_WORK_OFFLINE) > 0)
    {
        label1.Text = "オフライン";
    }
    else
    {
        label1.Text = "オンライン";
    }
    
[/code]

