Wie überprüfe ich Java, wenn der PC mit dem Netzwerkdrucker verbunden ist?

8

Grundsätzlich muss ich den Status des n / w Druckers überprüfen, ob er aktiviert ist oder nicht. Gibt es eine Möglichkeit, dies in Java zu tun?

Gibt es dafür eine Drittanbieter-API oder ein Tool?

Ich habe versucht, PrintServiceLookup in Java zu verwenden, aber es gibt nicht den Status, wenn es aktiviert ist oder nicht.

Auch, wenn es in Java nicht möglich ist, gibt es einen Befehl, der in Windows ausgeführt werden kann, der den Status des Druckers gibt?

Dann kann ich diesen Befehl in Java ausführen und überprüfen.

    
ashishjmeshram 14.10.2015, 03:58
quelle

6 Antworten

3

Nach " Funktionsweise von Netzwerkdruck "Es hängt wirklich von der Art des Druckers und dem Protokoll ab, das es unterstützt. Wenn Sie die IP-Adresse und den Port kennen, den Ihr Drucker verwendet, und wenn Ihr Drucker SNMP unterstützt (nur um ein Protokoll auszuwählen), dann müssen Sie Mit dem SNMP-Protokoll kann der Drucker nach Informationen abgefragt werden. Es gibt die Java-Bibliothek SNMP4j , die Ihnen dabei helfen kann. Ich würde vorschlagen, es nicht zu verwenden, außer der Drucker , der ip und der Anschluss werden sich niemals (!) Für Ihre Einrichtung ändern. Dies liegt daran, dass Sie mehrere Probleme haben können

  • Wie erkenne ich einen unbekannten Drucker?
  • Wie kann ich den vom Drucker verwendeten Anschluss erkennen?
  • Wie kann ich das vom Drucker verwendete Protokoll erkennen?

Nehmen wir an, die obigen Fragen würden kein großes Problem darstellen, und wir nehmen an, dass jeder Drucker SNMP unterstützt. Wie bekomme ich Informationen heraus? Neben der erwähnten Java-Bibliothek können Sie snmpget in Linux von einem Terminal aus verwenden. Die Syntax lautet wie folgt:

%Vor%

Die OID ist eine Objekt-ID für jede Eigenschaft Ihres Druckers, die von ausgeht pagecount zu Tonerkartusche Informationen. Wenn Sie keine OID hinzufügen, erhalten Sie die gesamte Liste der verfügbaren OIDs. Der Kern der Sache ist, obwohl alle OIDs standardisiert sind, die Verwendung der OIDs sich von Marke zu Marke und von Druckermodell zu Druckermodell unterscheidet. Für meine HP funktioniert das Folgende:

%Vor%

und gibt

zurück %Vor%

Die verwendete OID gibt den Status des Druckers für meine HP zurück. Aber wenn ich die gleiche OID auf meiner Canon verwende, bekomme ich

%Vor%

Daher ist es nicht einmal SNMP generisch anwendbar, nicht die anderen Protokolle zu erwähnen, die verfügbar sind.

Unter Berücksichtigung all dieser Informationen ist der einfachste Weg meiner Meinung nach, ob Sie die Verbindung zum Drucker an einem der üblichen Druckeranschlüsse über diesen Code herstellen können

%Vor%

Das funktioniert natürlich nur, wenn Sie den Drucker ip bereits kennen.

    
Westranger 20.10.2015 12:46
quelle
2
___ answer3195135 ___

Wenn Sie die IP-Adresse Ihres Druckers kennen, können Sie diesen Code verwenden, um ihn anzupingen und zu prüfen, ob er Jobs akzeptiert.

%Vor%

Natürlich müssen Sie diesen Code ein wenig ändern, um ihn in Ihrem Fall zu verwenden. Außer nativem Zugriff sehe ich keine bessere Lösung.

    
___ qstntxt ___

Grundsätzlich muss ich den Status des n / w Druckers überprüfen, ob er aktiviert ist oder nicht. Gibt es eine Möglichkeit, dies in Java zu tun?

Gibt es dafür eine Drittanbieter-API oder ein Tool?

Ich habe versucht, PrintServiceLookup in Java zu verwenden, aber es gibt nicht den Status, wenn es aktiviert ist oder nicht.

Auch, wenn es in Java nicht möglich ist, gibt es einen Befehl, der in Windows ausgeführt werden kann, der den Status des Druckers gibt?

Dann kann ich diesen Befehl in Java ausführen und überprüfen.

    
___ answer33237065 ___

Nach " Funktionsweise von Netzwerkdruck "Es hängt wirklich von der Art des Druckers und dem Protokoll ab, das es unterstützt. Wenn Sie die IP-Adresse und den Port kennen, den Ihr Drucker verwendet, und wenn Ihr Drucker SNMP unterstützt (nur um ein Protokoll auszuwählen), dann müssen Sie Mit dem SNMP-Protokoll kann der Drucker nach Informationen abgefragt werden. Es gibt die Java-Bibliothek SNMP4j , die Ihnen dabei helfen kann. Ich würde vorschlagen, es nicht zu verwenden, außer der Drucker , der ip und der Anschluss werden sich niemals (!) Für Ihre Einrichtung ändern. Dies liegt daran, dass Sie mehrere Probleme haben können

  • Wie erkenne ich einen unbekannten Drucker?
  • Wie kann ich den vom Drucker verwendeten Anschluss erkennen?
  • Wie kann ich das vom Drucker verwendete Protokoll erkennen?

Nehmen wir an, die obigen Fragen würden kein großes Problem darstellen, und wir nehmen an, dass jeder Drucker SNMP unterstützt. Wie bekomme ich Informationen heraus? Neben der erwähnten Java-Bibliothek können Sie %code% in Linux von einem Terminal aus verwenden. Die Syntax lautet wie folgt:

%Vor%

Die OID ist eine Objekt-ID für jede Eigenschaft Ihres Druckers, die von ausgeht pagecount zu Tonerkartusche Informationen. Wenn Sie keine OID hinzufügen, erhalten Sie die gesamte Liste der verfügbaren OIDs. Der Kern der Sache ist, obwohl alle OIDs standardisiert sind, die Verwendung der OIDs sich von Marke zu Marke und von Druckermodell zu Druckermodell unterscheidet. Für meine HP funktioniert das Folgende:

%Vor%

und gibt

zurück %Vor%

Die verwendete OID gibt den Status des Druckers für meine HP zurück. Aber wenn ich die gleiche OID auf meiner Canon verwende, bekomme ich

%Vor%

Daher ist es nicht einmal SNMP generisch anwendbar, nicht die anderen Protokolle zu erwähnen, die verfügbar sind.

Unter Berücksichtigung all dieser Informationen ist der einfachste Weg meiner Meinung nach, ob Sie die Verbindung zum Drucker an einem der üblichen Druckeranschlüsse über diesen Code herstellen können

%Vor%

Das funktioniert natürlich nur, wenn Sie den Drucker ip bereits kennen.

    
___ qstnhdr ___ Wie überprüfe ich Java, wenn der PC mit dem Netzwerkdrucker verbunden ist? ___ answer33194831 ___

Ich glaube nicht, dass Java eine portable API zur Überprüfung des Status bereitstellt. Je nach Ihren Anforderungen möchten Sie vielleicht die Windows API überprüfen

Ссылка

%Vor%

Mit ein paar JNI-Codes ist das trivial. Vielleicht sollten Sie auch Ссылка in Betracht ziehen nativer Zugriff auf einen Teil Ihres Codes einfacher

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer40336993 ___

Ich habe

verwendet %Vor%     
___ tag123networkprinters ___ Der Begriff Netzwerkdrucker bezieht sich auf den Drucker in einem Netzwerk, auf das alle Netzwerkcomputer zum Drucken zugreifen können. ___ answer33232894 ___

es gibt java api zur nativen Druckerei !! Schau dir diese Klasse an java.awt.Desktop
java2s.com z. B.

    
___ answer3195994 ___

Ich kann mir keinen einfachen Weg vorstellen, dies in Java zu tun (zweifellos wird jemand mit einer einzigen Codezeile kommen!). Ich bin vertrauter mit C # und, um Ihre Windows-Frage zu beantworten, würde ich Microsoft WMI verwenden, insbesondere %code% ( Ссылка ). Eine alte CodeProject-Website zeigt, wie Sie in C # mithilfe von %code% auf einen Offline-Drucker testen können ( Ссылка ).

Es könnte in deinem Fall funktionieren, weil dieser Typ ( Ссылка ) produziert hat jWMI, das die WMI-Systeme in Java abfragen kann. Ich bin mir nicht sicher, wie erschöpfend es ist, aber Sie könnten sich vorstellen, dass es auf %code% zugreifen könnte. Es benutzt VBScript, das es innerhalb von Java über %code% ausführt und erhält Werte von %code% , also habe ich keine Ahnung von Geschwindigkeit, aber er spricht auch über die Verwendung von WMIC.exe, die Ihnen besser passen könnte.

Aus seinem Klappentext sieht es so aus, als könnte Ihr Code so einfach sein wie:

%Vor%

wobei 7 (0x7) offline ist.

oder

%Vor%

Hier können verschiedene Zustände unterschieden werden (z. B. 0x7 = Ausschalten oder 0x8 = Offline usw.)

Die Abfragen ermöglichen auch eine "Select * from" -Syntax, so dass Sie die Drucker durchlaufen können, wenn Sie keinen Namen hatten.

%code% hat eine Eigenschaft ( %code% as Boolean), mit der Sie prüfen können, ob der Drucker lokal oder im Netzwerk ist, und dies ( Ссылка ) ist eine alte, aber interessante, lesen auf Test für einen Netzwerkdrucker in VBScript.

Diese Lösungen sind ziemlich lang im Griff (ich glaube, MI ist die neueste Version von WMI zum Beispiel), aber wenn diese jWMI-Bibliothek für Sie arbeiten kann, könnte es eine Antwort sein.

    
___
m.aibin 18.10.2015 06:48
quelle
1

Ich glaube nicht, dass Java eine portable API zur Überprüfung des Status bereitstellt. Je nach Ihren Anforderungen möchten Sie vielleicht die Windows API überprüfen

Ссылка

%Vor%

Mit ein paar JNI-Codes ist das trivial. Vielleicht sollten Sie auch Ссылка in Betracht ziehen nativer Zugriff auf einen Teil Ihres Codes einfacher

    
Dapeng 18.10.2015 06:00
quelle
1
___ answer3195135 ___

Wenn Sie die IP-Adresse Ihres Druckers kennen, können Sie diesen Code verwenden, um ihn anzupingen und zu prüfen, ob er Jobs akzeptiert.

%Vor%

Natürlich müssen Sie diesen Code ein wenig ändern, um ihn in Ihrem Fall zu verwenden. Außer nativem Zugriff sehe ich keine bessere Lösung.

    
___ qstntxt ___

Grundsätzlich muss ich den Status des n / w Druckers überprüfen, ob er aktiviert ist oder nicht. Gibt es eine Möglichkeit, dies in Java zu tun?

Gibt es dafür eine Drittanbieter-API oder ein Tool?

Ich habe versucht, PrintServiceLookup in Java zu verwenden, aber es gibt nicht den Status, wenn es aktiviert ist oder nicht.

Auch, wenn es in Java nicht möglich ist, gibt es einen Befehl, der in Windows ausgeführt werden kann, der den Status des Druckers gibt?

Dann kann ich diesen Befehl in Java ausführen und überprüfen.

    
___ answer33237065 ___

Nach " Funktionsweise von Netzwerkdruck "Es hängt wirklich von der Art des Druckers und dem Protokoll ab, das es unterstützt. Wenn Sie die IP-Adresse und den Port kennen, den Ihr Drucker verwendet, und wenn Ihr Drucker SNMP unterstützt (nur um ein Protokoll auszuwählen), dann müssen Sie Mit dem SNMP-Protokoll kann der Drucker nach Informationen abgefragt werden. Es gibt die Java-Bibliothek SNMP4j , die Ihnen dabei helfen kann. Ich würde vorschlagen, es nicht zu verwenden, außer der Drucker , der ip und der Anschluss werden sich niemals (!) Für Ihre Einrichtung ändern. Dies liegt daran, dass Sie mehrere Probleme haben können

  • Wie erkenne ich einen unbekannten Drucker?
  • Wie kann ich den vom Drucker verwendeten Anschluss erkennen?
  • Wie kann ich das vom Drucker verwendete Protokoll erkennen?

Nehmen wir an, die obigen Fragen würden kein großes Problem darstellen, und wir nehmen an, dass jeder Drucker SNMP unterstützt. Wie bekomme ich Informationen heraus? Neben der erwähnten Java-Bibliothek können Sie Win32_Printer in Linux von einem Terminal aus verwenden. Die Syntax lautet wie folgt:

%Vor%

Die OID ist eine Objekt-ID für jede Eigenschaft Ihres Druckers, die von ausgeht pagecount zu Tonerkartusche Informationen. Wenn Sie keine OID hinzufügen, erhalten Sie die gesamte Liste der verfügbaren OIDs. Der Kern der Sache ist, obwohl alle OIDs standardisiert sind, die Verwendung der OIDs sich von Marke zu Marke und von Druckermodell zu Druckermodell unterscheidet. Für meine HP funktioniert das Folgende:

%Vor%

und gibt

zurück %Vor%

Die verwendete OID gibt den Status des Druckers für meine HP zurück. Aber wenn ich die gleiche OID auf meiner Canon verwende, bekomme ich

%Vor%

Daher ist es nicht einmal SNMP generisch anwendbar, nicht die anderen Protokolle zu erwähnen, die verfügbar sind.

Unter Berücksichtigung all dieser Informationen ist der einfachste Weg meiner Meinung nach, ob Sie die Verbindung zum Drucker an einem der üblichen Druckeranschlüsse über diesen Code herstellen können

%Vor%

Das funktioniert natürlich nur, wenn Sie den Drucker ip bereits kennen.

    
___ qstnhdr ___ Wie überprüfe ich Java, wenn der PC mit dem Netzwerkdrucker verbunden ist? ___ answer33194831 ___

Ich glaube nicht, dass Java eine portable API zur Überprüfung des Status bereitstellt. Je nach Ihren Anforderungen möchten Sie vielleicht die Windows API überprüfen

Ссылка

%Vor%

Mit ein paar JNI-Codes ist das trivial. Vielleicht sollten Sie auch Ссылка in Betracht ziehen nativer Zugriff auf einen Teil Ihres Codes einfacher

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer40336993 ___

Ich habe

verwendet %Vor%     
___ tag123networkprinters ___ Der Begriff Netzwerkdrucker bezieht sich auf den Drucker in einem Netzwerk, auf das alle Netzwerkcomputer zum Drucken zugreifen können. ___ answer33232894 ___

es gibt java api zur nativen Druckerei !! Schau dir diese Klasse an java.awt.Desktop
java2s.com z. B.

    
___ answer3195994 ___

Ich kann mir keinen einfachen Weg vorstellen, dies in Java zu tun (zweifellos wird jemand mit einer einzigen Codezeile kommen!). Ich bin vertrauter mit C # und, um Ihre Windows-Frage zu beantworten, würde ich Microsoft WMI verwenden, insbesondere Win32_Printer ( Ссылка ). Eine alte CodeProject-Website zeigt, wie Sie in C # mithilfe von Win32_Printer auf einen Offline-Drucker testen können ( Ссылка ).

Es könnte in deinem Fall funktionieren, weil dieser Typ ( Ссылка ) produziert hat jWMI, das die WMI-Systeme in Java abfragen kann. Ich bin mir nicht sicher, wie erschöpfend es ist, aber Sie könnten sich vorstellen, dass es auf cmd.exe zugreifen könnte. Es benutzt VBScript, das es innerhalb von Java über stdout ausführt und erhält Werte von Win32_Printer , also habe ich keine Ahnung von Geschwindigkeit, aber er spricht auch über die Verwendung von WMIC.exe, die Ihnen besser passen könnte.

Aus seinem Klappentext sieht es so aus, als könnte Ihr Code so einfach sein wie:

%Vor%

wobei 7 (0x7) offline ist.

oder

%Vor%

Hier können verschiedene Zustände unterschieden werden (z. B. 0x7 = Ausschalten oder 0x8 = Offline usw.)

Die Abfragen ermöglichen auch eine "Select * from" -Syntax, so dass Sie die Drucker durchlaufen können, wenn Sie keinen Namen hatten.

Network hat eine Eigenschaft ( %code% as Boolean), mit der Sie prüfen können, ob der Drucker lokal oder im Netzwerk ist, und dies ( Ссылка ) ist eine alte, aber interessante, lesen auf Test für einen Netzwerkdrucker in VBScript.

Diese Lösungen sind ziemlich lang im Griff (ich glaube, MI ist die neueste Version von WMI zum Beispiel), aber wenn diese jWMI-Bibliothek für Sie arbeiten kann, könnte es eine Antwort sein.

    
___
Ambie 18.10.2015 08:46
quelle
1

es gibt java api zur nativen Druckerei !! Schau dir diese Klasse an java.awt.Desktop
java2s.com z. B.

    
HassanBakri 20.10.2015 09:27
quelle
-1

Ich habe

verwendet %Vor%     
user2983520 31.10.2016 05:22
quelle

Tags und Links