Zebraラベルプリンタのプリンタステータスを取得しようとしています。WMIを試し、PrinterState、PrinterStatus、ExtendedPrinterStatus、DetectedErrorState、ExtendedDetectedErrorStateを確認しましたが、UnknownやIdleなどの値を常に取得しています。プリンターは実際には用紙がありません。そのステータスを取得したいと思います。Windowsプリンタ領域自体も、ステータスについて「準備完了」を報告しています。小さなZebraStatusMonitorアプリをインストールしましたが、「用紙切れ」が正しく報告されます。
プリンタに直接クエリを実行するには、いくつかのWindowsAPIをpInvokeする必要があると思います。Zebraには、GetPrinter()およびGetPrinterData()の使用法を示すこのリファレンスがあります。GetPrinter()を使用したこのC#の例を見つけました。これは機能し、適切な情報が含まれていますが、ステータスは0であり、用紙切れを示すものは何も表示されません。
ここで、 Zebraドキュメントが使用してチェックするGetPrinterData()を使用してみますPRINTER_STATUS_PAPER_OUT
。そのGetPrinter()コードをOpenPrinter()に使用して(これは成功します)、GetPrinterData()のいくつかのバリエーションを試しました。これが1つです:
uint pType = 0;
uint pcbNeeded = 0;
uint result1 = GetPrinterData(pHandle, "Error", out pType, null, 0, out pcbNeeded);
result1は常に2の値であり、pcbNeededは0の値です。プリンターの電源をオフにしても、プリンターに用紙がある場合でも、常に同じ値が得られます。
GetPrinterData()を正しくpInvokeする方法、または実際のプリンターステータスを取得する方法に関するヘルプは非常に役立ちます。