我能夠得到我以前在我的PC上安裝過的打印機的名稱,但現在它的物理上並沒有連接到我的電腦上。在Java中移動到Print()之前,我應該如何檢查它。如何檢查打印機是否通過Java連接到您的PC?
回答
看看javax.print API。一個好的起點是PrintServiceLookup。
從什麼時候起,SO upvote「閱讀文檔」的評論? – th3byrdm4n 2017-09-26 20:35:54
您可以使用PrinterState
屬性如果您的打印機支持。
事情是這樣的:
PrintServiceAttributeSet printServiceAttributes = selectedService.getAttributes();
PrinterState printerState = (PrinterState) printServiceAttributes.get(PrinterState.class);
if (printerState != null){
System.out.println(printerName + " is online");
}
else {
System.out.println(printerName + " is offline");
}
在過去的幾天裏,我一直在測試很多連接到操作系統的打印機和網絡打印機,並且似乎無法檢查打印機的狀態。上面的代碼片段什麼都不做。 (如在;所有「離線」。)(我是Windows 7與Java 7) – Philipp 2013-12-03 12:03:32
你知道爲什麼PrinterState總是空? – whizzzkey 2014-11-18 01:25:45
沒有爲我們工作,謝謝。 – th3byrdm4n 2017-09-26 20:36:11
中有沒有設定PrinterState屬性。但是你可以加載庫Winspool.drv並詢問它的屬性。存在int Attributes @ 68 =,它具有聯機的40值和脫機打印機的e40值。
開始出現 - https://msdn.microsoft.com/cs-cz/library/windows/desktop/dd144911(v=vs.85).aspx。
使用這些類,然後讓WinspoolUtilExt.getPrinterInfo2(ps.getName())。toString()和有一個屬性。
public interface WinspoolExt extends Winspool {
WinspoolExt INSTANCE = (WinspoolExt) Native.loadLibrary("Winspool.drv", WinspoolExt.class, W32APIOptions.UNICODE_OPTIONS);
boolean GetPrinter(HANDLE hPrinter, int Level, Pointer pPrinter, int cbBuf, IntByReference pcbNeeded);
boolean OpenPrinter(String pPrinterName, HANDLEByReference phPrinter, Pointer pDefault);
public static class PRINTER_INFO_2 extends Structure {
public String pServerName;
public String pPrinterName;
public String pShareName;
public String pPortName;
public String pDriverName;
public String pComment;
public String pLocation;
public INT_PTR pDevMode;
public String pSepFile;
public String pPrintProcessor;
public String pDatatype;
public String pParameters;
public INT_PTR pSecurityDescriptor;
public int Attributes;
public int Priority;
public int DefaultPriority;
public int StartTime;
public int UntilTime;
public int Status;
public int cJobs;
public int AveragePPM;
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] { "pServerName", "pPrinterName", "pShareName", "pPortName", "pDriverName", "pComment", "pLocation", "pDevMode", "pSepFile", "pPrintProcessor", "pDatatype", "pParameters", "pSecurityDescriptor", "Attributes", "Priority", "DefaultPriority", "StartTime", "UntilTime", "Status", "cJobs", "AveragePPM" });
}
public PRINTER_INFO_2() {
}
public PRINTER_INFO_2(int size) {
super(new Memory(size));
}
}
}
public class WinspoolUtilExt extends WinspoolUtil {
public static PRINTER_INFO_2 getPrinterInfo2(String printerName) {
IntByReference pcbNeeded = new IntByReference();
IntByReference pcReturned = new IntByReference();
HANDLEByReference pHandle = new HANDLEByReference();
WinspoolExt.INSTANCE.OpenPrinter(printerName, pHandle, (Pointer) null);
WinspoolExt.INSTANCE.GetPrinter(pHandle.getValue(), 2, null, 0, pcbNeeded);
if (pcbNeeded.getValue() <= 0) {
return new PRINTER_INFO_2();
}
PRINTER_INFO_2 pinfo2 = new PRINTER_INFO_2(pcbNeeded.getValue());
WinspoolExt.INSTANCE.GetPrinter(pHandle.getValue(), 2, pinfo2.getPointer(), pcbNeeded.getValue(), pcReturned);
pinfo2.read();
return (PRINTER_INFO_2) pinfo2;
}
}
Maven依賴:
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>${jna.version}</version>
</dependency>
另一種方法是使用PowerShell和查詢:
Get-WmiObject -Query "Select * From Win32_PnPEntity where deviceid like 'USBPRINT\\%' and caption like '%Canon%'"
這樣,你得到的只是,如果打印機結果連接的。
可以從Java查詢WMI有許多圖書館,搜索 「WMI Java庫」。
- 1. 如何檢查打印機是否與我的PC物理連接?
- 2. 如果PC連接到網絡打印機,如何在java中檢查?
- 3. 檢查打印機是否連接到電腦
- 4. 是否可以通過藍牙連接iphone到打印機?
- 5. 如何通過python連接到以太網打印機?
- 6. Java:如何檢查打印機狀態
- 7. Python腳本如何檢測耳機/耳機是否連接到PC?
- 8. 檢查默認打印機是與否
- 9. 可以通過藍牙連接android手機到打印機嗎?
- 10. 檢查PC是否連接到局域網
- 11. 如何檢測是否有網絡攝像頭連接到PC?
- 12. 如何檢查客戶端是否不再通過Java中的TCP連接?
- 13. 如何通過Android連接網絡打印機?
- 14. 如何在java連接池中檢查連接是否關閉
- 15. 如何使用C#檢查機器是否能夠通過mstsc進行連接
- 16. 通過網絡直接打印到打印機(如POS打印機)的最佳方式是什麼?
- 17. 如何檢測連接的USB打印機是打開還是關閉?
- 18. 無法連接到POS打印機通過TCP 9100
- 19. 使用虛擬打印機時,如何檢查打印是否完成?
- 20. 如何檢查是否有默認打印機(Windows)?
- 21. 如何通過PHP檢查我的腳本是否連接到SMTP服務器
- 22. Java:檢查PC是否空閒
- 23. 如何通過NSTask檢查FTP連接?
- 24. 通過CAN/CANopen從PC連接到PLC
- 25. 通過mailEntryId檢查mailWindow是否打開
- 26. Python通過套接字連接訪問遠程打印機
- 27. API的TOI連接到打印機
- 28. JavaPOS的:無法連接到打印機
- 29. 在ios中打印:如果打印機連接到mac,是否可以從模擬器打印?
- 30. 通過BLE將Arduino101連接到PC中的Java應用程序
如果它是好的,該解決方案是針對Windows的,看到http://stackoverflow.com/a/41808295/1082681。 – kriegaex 2017-01-23 14:13:04