0

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する方法、または実際のプリンターステータスを取得する方法に関するヘルプは非常に役立ちます。

4

2 に答える 2

0

遅くなりましたが、C# での Zebra プリンターとの USB 通信の投稿では、USB 経由でプリンターにクエリを実行する方法を示しています。

于 2012-10-05T21:31:57.760 に答える