質問: 現在アプリからプリンタに出力するアプリがあります 接続切断検知についてなのですが 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を画像に変換する 上記のページに PRINTER_INFO_2 を取得するコードがありました。 PRINTER_INFO_2 を取得し、下記のようなコードで指定したプリンターがオンラインかどうか判定ができると思います。 ``` PRINTER_INFO_2 printerInfo = GetPrinterInfo("SHARP MX-2610FN SPDL2-c"); if ((printerInfo.Attributes & PRINTER_ATTRIBUTE_WORK_OFFLINE) > 0) { label1.Text = "オフライン"; } else { label1.Text = "オンライン"; } ```