| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| |
 | Effektives Anforderungsmanagement und agile Entwicklung, eine Pressemitteilung
|
Autor
|
Thema: GDI Drucker von Windows abfragen (235 / mal gelesen)
|
Seele Mitglied Konstrukteur
 
 Beiträge: 411 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.1.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 25. Mrz. 2025 08:10 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich möchte über ein Makro Zeichnungen im Annotation direkt an den Drucker schicken. Soweit so gut, früher hatten wir die Drucker auf einem Server im Netzwerk installiert und die Netzwerkpfade waren dadurch in der ganzen Firma gleich. Nach der Umstellung der Server sind die Drucker nur noch Lokal zu erreichen und leider nicht auf jedem PC auch gleich benannt, .... Jetzt Frage ich mich, ob man im Annotation genauso wie es der Originale Druckbefehl macht, die Liste der installierten Drucker auslesen kann, um sie als Auswahl im Makro zu verwenden? Also die Liste der Drucker auslesen (Siehe Bild) Mit freundlichen Grüßen Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein.  Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
 
 Beiträge: 411 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.1.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 25. Mrz. 2025 08:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ... bin einen Schritt weiter gekommen, ... wmic printer list brief > C:\Druckerliste.txt unter CMD ausgeführt erzeugt eine Textdatei "C:\Druckerliste.txt" mit den installierten Druckern, die kann ich dann auswerten, ... Gruß Wolfgang
------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein.  Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
 
 Beiträge: 411 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.1.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 25. Mrz. 2025 10:04 <-- editieren / zitieren --> Unities abgeben:         
Hallo, Problem habe ich mittlerweile selbst gelöst, ... Die LISP-Datei mit meiner Quick&Dirty Lösung habe ich hier mal mit rein gestellt, falls jemand das gleiche Problem hat, ... Mit (setq Drucker_Liste (Drucker_Liste_holen)) kann man sich damit die aktuelle Druckerliste aus Windows auslesen, ... Gruß Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein.  Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2296 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.5737 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.0.0.1@job ● Taschenrechner ● Stift+Zettel V8.42
|
erstellt am: 25. Mrz. 2025 10:21 <-- editieren / zitieren --> Unities abgeben:          Nur für Seele
Zitat: Original erstellt von Seele: wmic printer list brief > C:\Druckerliste.txt ... die kann ich dann auswerten, ...
Ohne Ascii File Fummelei: Code: (oli::sd-execute-annotator-function :fnc "Docu_get_all_printers") ; on windows
Das sind dann ziemlich viele, eben auch generische. Oder besser Code: (oli::sd-execute-annotator-function :fnc "Docu_inq_plotters")
und ohne die generischen: Code: (getf (car (oli::sd-execute-annotator-function :fnc "Docu_inq_plotters")) :MSWINDOW_GDI_PRINTER)
Quelle:
Da_Wo_Modeling_Installiert_Ist/Annotation/win/am_plot.m und einfach mal tracen und dann mit "STRG-P" den Druck Dialog aufrufen. wie immer: .. hier mit "oli::" zum Ausprobieren auf der Modeling Command line. ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ●
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2296 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.5737 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.0.0.1@job ● Taschenrechner ● Stift+Zettel V8.42
|
erstellt am: 25. Mrz. 2025 10:55 <-- editieren / zitieren --> Unities abgeben:          Nur für Seele
|
Seele Mitglied Konstrukteur
 
 Beiträge: 411 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.1.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 26. Mrz. 2025 10:04 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wolfgang, du legst dich ganz schön ins Zeug, ... ==> wmic /output:%TEMP%\Druckerliste.txt printer get Name Hast du auch noch eine Abfrage für die möglichen Blattgrößen parat, wenn man dann einen bestimmten Drucker ausgewählt hat? Gruß Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein.  Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2296 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.5737 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.0.0.1@job ● Taschenrechner ● Stift+Zettel V8.42
|
erstellt am: 26. Mrz. 2025 12:34 <-- editieren / zitieren --> Unities abgeben:          Nur für Seele
|
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2296 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.5737 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.0.0.1@job ● Taschenrechner ● Stift+Zettel V8.42
|
erstellt am: 26. Mrz. 2025 12:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Seele
|
holt Mitglied Systembetreuer CAD
  
 Beiträge: 720 Registriert: 07.08.2003 Lenovo ThinkStation P360 Core i7-12700@2.10 GHz, 32GB NVIDIA RTX A2000 12 GB Creo Elements/Direct Modeling 20.5 Creo Elements/Direct Drafting 20.5 Creo Elements/Direct ModelManager 20.5
|
erstellt am: 22. Apr. 2025 10:03 <-- editieren / zitieren --> Unities abgeben:          Nur für Seele
Hallo, als Ergänzung und Anregung: Ich habe folgendes in meinem Fundus:
Code: ;; Variante WMI-Abfrage (langsam!) (defun inq-printers(s) (format s "printers=\"\" Set wmi=GetObject(\"winmgmts:\\\\.\\root\\CIMV2\") For Each obj in wmi.ExecQuery(\"SELECT * FROM Win32_Printer\") printers = obj.Name WScript.Echo(printers) Next" ) );; Variante Registry-Abfrage (defun inq-printers-reg(s) (format s "Const HKEY_CURRENT_USER = &H80000001 Set oReg=GetObject(\"winmgmts:{impersonationLevel=impersonate}!\\root\\default:StdRegProv\") oReg.EnumValues HKEY_CURRENT_USER, \"Software\\Microsoft\\Windows NT\\CurrentVersion\\Devices\", valueNames, valueTypes For e=0 To UBound(valueNames) WScript.Echo valueNames(e) Next" ) ) (defun inq-default-printer-reg(s) (format s "Const HKEY_CURRENT_USER = &H80000001 Set oReg=GetObject(\"winmgmts:{impersonationLevel=impersonate}!\\root\\default:StdRegProv\") oReg.EnumValues HKEY_CURRENT_USER, \"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows\", valueNames, valueTypes For e=0 To UBound(valueNames) If valueNames(e) = \"Device\" Then oReg.GetStringValue HKEY_CURRENT_USER, \"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows\", valueNames(e), strValue a = Split(strValue,\",\") Wscript.Echo a(0) End If Next" ) ) ;; Special Thanks to Claus Brod www.clausbrod.de (defun execute-vbscript(scriptfunction) (let ((tmpfile (oli:sd-convert-filename-to-platform (format nil "~A.vbs" (oli:sd-gen-unique-filename (format nil "~A/" (oli:sd-convert-filename-from-platform (oli:sd-sys-getenv "USERPROFILE")))))))) (pprint tmpfile) ;; write temporary script file (with-open-file (s tmpfile :Direction utput) (funcall scriptfunction s)) ;; execute script file (prog1 (with-open-file (s (format nil "| cscript /nologo \"~A\"" tmpfile)) (let (l) (loop while (setf l (read-line s nil)) collecting (remove #\Return l)))) (delete-file tmpfile) ) ) )
Die Abfragen mittels WMI bzw. in die Registry erfolgen mittels vb-Script. Diese werden mittels der Funktion execute-vbscript (Danke hier nochmals an Claus Brod! ) abgesetzt. Weiters habe ich noch auf ME10-Seite das gefunden:
Code:
DEFINE Read_plot_list LOCAL Plot_cnt LOCAL Plotter LOCAL i CREATE_LTAB 'plotter_ltab' INQ_ENV 22 LET Plot_cnt (INQ 2) LET i 1 LET Plotter (INQ 900) WHILE (i <= Plot_cnt) WRITE_LTAB 'plotter_ltab' i 1 i WRITE_LTAB 'plotter_ltab' i 2 (UPC Plotter) LET Plotter (INQ 901) LET i (i + 1) END_WHILE WRITE_LTAB 'plotter_ltab' i 1 i WRITE_LTAB 'plotter_ltab' i 2 'PDF_GENERIC' SORT_LTAB 'plotter_ltab' 2 CONFIRM SAVE_LTAB 'plotter_ltab' DEL_OLD (Tmp_dir+'\plotters.txt') END_DEFINEDEFINE Read_paper_list LOCAL Plotter LOCAL Plotter_name LOCAL Papier LOCAL Paper_ltab LOCAL Plot_cnt LOCAL i LOCAL j LOCAL Pos_str LET Plot_cnt (LTAB_ROWS 'plotter_ltab') LET i 0 WHILE (i < Plot_cnt) LET i (i + 1) LET Plotter (READ_LTAB 'plotter_ltab' i 2) IF ((TRIM Plotter) <> '') PLOTTER_TYPE Plotter LET Pos_str (POS (SUBSTR Plotter 3 (LEN Plotter)) '\') IF (Pos_str < 1) LET Pos_str 1 ELSE LET Pos_str (Pos_str + 3) END_IF LET Plotter_name (SUBSTR Plotter (Pos_str) (LEN Plotter)) LET Paper_ltab (Plotter + '_paper_ltab') CREATE_LTAB Paper_ltab INQ_ENV 22 LET Papier (INQ 902) LET j 0 WHILE (Papier <> 'END-OF-LIST') LET j (j + 1) WRITE_LTAB Paper_ltab j 1 i WRITE_LTAB Paper_ltab j 2 j WRITE_LTAB Paper_ltab j 3 Papier LET Papier (INQ 903) END_WHILE SORT_LTAB Paper_ltab 3 CONFIRM SAVE_LTAB Paper_ltab DEL_OLD (Tmp_dir + '\' + (STR i) + '_' + Plotter_name + '_Papier.txt') END_IF END_WHILE END_DEFINE
Das müsste sich auch aus Annotaiton aufrufen lassen. Alles ohne Gewähr ------------------ Gruß aus dem Salzkammergut Thomas [Diese Nachricht wurde von holt am 22. Apr. 2025 editiert.] [Diese Nachricht wurde von holt am 22. Apr. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2296 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.5737 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.0.0.1@job ● Taschenrechner ● Stift+Zettel V8.42
|
erstellt am: 22. Apr. 2025 19:25 <-- editieren / zitieren --> Unities abgeben:          Nur für Seele
Zitat: Original erstellt von holt: als Ergänzung und Anregung: Ich habe folgendes in meinem Fundus:
Sehr schön! 👍 Danke! Da müssten wir ja fast mal ein cadde-modeling-printer-util.lsp Paket schnüren. 🙂 Ich habe es mal probiert Code: (cadde-mh::execute-vbscript 'cadde-mh::inq-printers) ;; returns list of strings (cadde-mh::execute-vbscript 'cadde-mh::inq-printers-reg) ;; returns list of strings (cadde-mh::execute-vbscript 'cadde-mh::inq-default-printer-reg) ;; returns list of string, with just one printer name
Die inq-printers-reg variante ist bei mir spürbar schneller. ==================================================== Da die LTABs nicht weggelöscht werden, kommt man im Annotation wie folgt weiter:
Code: (oli::sd-execute-annotator-command :cmd "LET Tmp_dir 'c:/temp'") ;; das fehlt noch - sinngemäß (oli::sd-execute-annotator-command :cmd "input 'C:/whereeveritmightbe/cadde-92-001041_DruckerListe-holt.m' ") (oli::sd-execute-annotator-function :fnc "Read_plot_list Docu_write_ltab_to_sd 'plotter_ltab'")
wie immer: .. hier mit "oli::" zum Ausprobieren auf der Modeling Command line.Der 2. Makro schreibt leider mehrerere LTABs. Den täte ich umstricken und alles in eine Tabelle schreiben, dabei um eine Spalte erweitern, die den 'Plotter' Name beinhaltet. Und dann wieder Docu_write_ltab_to_sd nutzen.
Code: (oli::sd-execute-annotator-function :fnc "Read_paper_list Docu_write_ltab_to_sd 'plotter_paper_ltab'")
------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |