Drucker ndern unter Mavericks

Ich habe ein Problem mit Mavericks.
Bisher habe ich über Apple Scripte eine Druckerliste erstellt und ggf. den aktuellen Drucker bzw. Standarddrucker geändert. Ich brauche das, damit z.B. für Etiketten, Rezepte oder Rechnungen jeweils der richtige Netzwerkdrucker im Druckdialog als Vorbesetzung angezeigt wird.

tell application "Printer Setup Utility" return the name of every printer end tell

Jetzt scheint es so, das die Printer Setup Utility-Application nicht mehr in Mavericks vorhanden ist. Es erscheint bei Aufruf der Scripte eine Fehlermeldung .app nicht gefunden, dann Auswahldialog zum Suchen. Mit 10.8. funktionierte alles einwandfrei. Im Apple Developer Network habe ich nichts erhellendes gefunden…

Hat jemand eine Idee?

Vielleicht in Zukunft per Plugin ndern?
Wir haben da Funktionen beim CUPS Plugin dabei.

Ah besten Dank. Das CUPS-Plugin schaue ich mir gleich mal an.

Dann war der Plugin-Spam ja erfolgreich :stuck_out_tongue:

Ich habe mal eben folgendes Zusammengehackt. Damit geht es auch ohne plugin:

  Soft Declare Function NSClassFromString Lib "Cocoa" (aClassName As CFStringRef) As Ptr
  
  Soft Declare Function printerNames  Lib "Cocoa" selector "printerNames"(classRef As Ptr) As Ptr
  
  Soft Declare Function count Lib "Cocoa" Selector "count" (NSArray As Ptr) As UInt32
  Soft Declare Function objectAtIndex Lib "Cocoa" Selector "objectAtIndex:" (NSArray As Ptr, index As UInt32) As CFStringRef
  
  Dim NSPrinterRef As Ptr = NSClassFromString("NSPrinter")
  Dim NamesArrayRef As Ptr = printerNames(NSPrinterRef)
  
  dim prCount As integer = count(NamesArrayRef)-1
  for i as UInt32 = 0 to prCount
    dim prName As string = objectAtIndex(NamesArrayRef, i)
    System.Log System.LogLevelError, "Name: "+ prName
  next

Danke Thomas,
schaue ich mir natürlich auch gleich an. Bin ich nicht drauf gekommen das so zu lösen. Habe es mit Apple Script probiert, aber nichts vernünftiges gefunden. Kann ich über die Soft Declares auch den aktuellen Drucker lesen und schreiben, wenn ja wie?
Ohne weiteres PlugIn für 3 Funktionen (PrinterNames, “ReadDefaultPrinter”, “WriteDefaultPrinter”) wäre mir auch lieber ;).
Besten Dank übrigens für die Mühe.

Na ja, Thomas sein coce listet ja nur die Drucker auf. Das hab ich mehrmals im Plugin mit verschiedenen APIs.
Das Problem ist halt das umschalten vom Drucker.

Nun, der code von mir war nur ale Beispiel gedacht, wie man in Xojo mit den Cocoa declares arbeiten kann. Ich hatte mir nur Deine Frage angeschaut und dann mal eben ein paar minuten investiert um zu sehen wie man das angehen könnte.
Mehr habe ich dazu nicht, ich würde einen Blick in die “Core Printing Reference” empfehlen. Wenn Du was hast wäre es nett das hier zu posten :wink:

Kann das CUPS Plugin das nun oder nicht? Ich suche schon ewig nach einer Lösung der Drucker umzuschalten. Setzt natürlich voraus, dass es zuvor eine Liste gibt bei der ich Zuordnungen treffen kann… also Drucker xy für Etiketten usw…
Wenn ja, könntest du ein kleines Beispiel basteln bitte?

http://www.monkeybreadsoftware.net/module-cupsmbs.shtml

Mit GetDestinations die Drucker abfragen. Mit SetDefaultPrinter ndern.

probiere ich gleich mal aus…

Ich bekomme immer die Krise wenn ich sehe für welche Tasks immer ein Pulgin verwendet wird.

Eine Google-Suche zu CUPS gibt schon wertvolle Hinweise und ein Blick in die man-pages hilft dann zur not weiter.

Im Terminal kann man das alles machen und die Nutzung über Shell-Klasse ist auch nicht wirklich Raketentechnik.
lpstat -d - zeigt aktuellen Defaultdrucker
lpstat -p - zeigt Druckerliste
lpoptions -d NAME - setzt Defaultdrucker auf NAME

ich nutze die MBS Plugins sowieso in meiner App… insofern kann ich dann auch alle Features nutzen!

CUPSMBS.SetDefaultPrinter(mein_drucker)
… funktioniert prima, aber leider nur, wenn ich danach mit g= OpenPrinterDialog(ps_pos) aufrufe,
wenn ich es ohne Dialog möchte, ändert er den Drucker nicht, also g= OpenPrinter(ps_pos) druckt immer auf den letzten eingestellten Standard-Drucker

Christian, ist das ein Bug in MBS?

eher ein fehlendes Feature.
Vielleicht doch besser sich ein PrinterSetup pro Drucker merken und dann das mit übergeben?

Mache ich eh mit dem Printersetup, g= OpenPrinter(ps_pos) , g= OpenPrinter(ps_standard) usw , nutzt aber nichts…

Könntest du das bitte einbauen?