# Standard-Drucker mit Java setzen



## Gary (29. Jul 2005)

Hallo Leute,

wie kann ich unter Java den Standard-Drucker festlegen? Ich lasse mir meine per Javaprogramm in eine DB gespeicherten Daten mit Crystal Reports anzeigen. Wenn ich CR direkt zum Drucken aufrufe wird automatisch auf dem Standard-Drucker die Ausgabe gestartet. Wenn ein anderer als der Standard-Drucker angesprochen werden soll kann ich die Druckerauswahl nur innerhalb der Java-Gui vornehmen. Die Liste der installierten Drucker kann ich mir mit PrinterJob.lookupPrintServices(); anzeigen lassen, aber ich habs bisher nicht geschafft einen neuen Drucker als Standard-Drucker für Windows zu setzen.

Das dabei die Systemunabhängigkeit verloren geht ist mir klar, aber auch egal. Ich hab gelesen, das über die Windows-Api sowas möglich ist
	
	
	
	





```
BOOL SetDefaultPrinter(LPCTSTR pszPrinter // default printer name);
```
, weiß aber nicht, wie ich den Befehl einsetzen kann.


Vielen Dank für Eure Vorschäge!!!!

Gruß
Gary


----------



## Grizzly (30. Jul 2005)

Hast Du es schon mal mit *setPrintService*(PrintService servcie) probiert? Einfach mit *lookupPrintServices*() die Drucker des Systems ermitteln und beim Drucken mit *setPrintService*(PrintService servcie) setzen.


----------



## Gary (1. Aug 2005)

Leider funktioniert das ja nur, wenn ich innerhalb von Java einen neuen PrinterJob anlegen und dann mit Java drucke. Ich möchte aber den Drucker in Java auswählen, und dann einen Druckprozess außerhalb von Java (mit Crystal Reports) starten. Das eigentliche Drucken hat dadurch mit Java nichts zu tun. Es geht lediglich darum eine Einstellung in Java vorzunehmen.

Habe jetzt versucht mit Hilfe eines reg-Scriptes Daten in der Windows-Registry zu manipulieren, aber leider ohne Erfolg. Zum einen bin ich mir nicht sicher, welcher Eintrag für den Standard-Drucker zuständig ist, zum anderen konnte ich nicht mit 
	
	
	
	





```
Runtime.getRuntime().exec( "regedit -r test.reg" );
```
 keine Änderungen in der Registry durchführen (es sollte ein Script mit den zu ändernden Einträgen ausgeführt werden).


Vielen Dank für weitere Vorschläge
Gary


----------



## Grizzly (1. Aug 2005)

Okay, hab' das dann wohl falsch verstanden. 

Wenn Du am Betriebssystem Einstellungen ändern willst, wirst Du mit Java nicht arg weit kommen. Außer Du benutzt natürlich entsprechende Bibliotheken aus dem Internet. Aber ansonsten wird das wohl nix.


----------



## Gary (2. Aug 2005)

Zur Info: ich hab ne Lösung für mein Problem gefunden!

Die Lösung war eigentlich relativ einfach: 
Man schickt ein Commando zum Festlegen des Standard-Druckers an Windows mit:

```
Runtime.getRuntime().exec("rundll32 printui.dll,PrintUIEntry /y /n \""+standardPrinter+"\"");
```
Dabei wird standardPrinter mit dem Namen des neuen Standard-Druckers belegt, welcher zuvor aus dem Array von PrintService[] ps = PrinterJob.lookupPrintServices(); ausgewählt wurde.

Weitere Befehle zur Druckermanipulation dieser Art sind zu finden unter:
www.administrator.de/Drucker_installieren_per_Batch-datei.html


Viele Grüße
Gary


----------

