0
私は助けを必要としています!JNA - 複数のOpenPrinterを取得
私はPrintJob(最後のもの)のすべての情報を取得する必要があります。 問題は次のとおりです。私の会社のコンピュータには、1台のPCに複数のプリンタが搭載されています。 したがって、スプーラレベルで複数のプリンタを監視する必要があります。 私はすでに非常に多くのロジックを試してみましたが、最後のものということでした。
Winspool.PRINTER_INFO_2[] printerInfo2 = WinspoolUtil.getPrinterInfo2();
if (printerInfo2.length == 0)
System.out.println("Sem impressoas");
String[] printerNames = new String[printerInfo2.length];
System.out.println();
int arrayIndex = 0;
for (Winspool.PRINTER_INFO_2 aPrinterInfo2 : printerInfo2) {
printerNames[arrayIndex] = aPrinterInfo2.pPrinterName;
//if (aPrinterInfo2.pPrinterName.startsWith("\\")) {
//printerNames[arrayIndex] = aPrinterInfo2.pPrinterName.substring(17);
//}
arrayIndex++;
}
//endregion
HANDLEByReference handleByReference = new HANDLEByReference();
boolean[] printersOpened = new boolean[printerNames.length];
arrayIndex = 0;
for (String printerName : printerNames) {
printersOpened[arrayIndex] = Winspool.INSTANCE.OpenPrinter(printerName, handleByReference, null);
if (!printersOpened[arrayIndex]) {
getLastError();
}
arrayIndex++;
}
と私はプリンタにアクセス:
WinNT.HANDLE chgObject = Winspool.INSTANCE.FindFirstPrinterChangeNotification(handleByReference.getValue(),
Winspool.PRINTER_CHANGE_JOB, 0, null);
if (chgObject != null) {
while (true) {
Kernel32.INSTANCE.WaitForSingleObject(chgObject, 1000);
WinDef.DWORDByReference pdwChange = new WinDef.DWORDByReference();
boolean fcnreturn = Winspool.INSTANCE.FindNextPrinterChangeNotification(chgObject, pdwChange,
null, null);
if (fcnreturn) {
Winspool.JOB_INFO_1[] jobInfo1 = WinspoolUtil.getJobInfo1(handleByReference);
for (Winspool.JOB_INFO_1 aJobInfo1 : jobInfo1) {
System.out.println("-----------xx-----------");
System.out.println(aJobInfo1.pDocument);
System.out.println(aJobInfo1.pPrinterName);
System.out.println("-----------xx-----------");
}
break;
}
}
}
しかし、私は唯一の最後のインスタンス化プリンタを得ることができます...いずれかがあった場合JNAを介して、ユーザーが選択したプリンタをキャプチャするために、私はそれをまだ見つけていません。
私は質問します。プリンタに頼らずにスプーラを監視するにはどうすればよいですか?