Deutsch
Forum

Druckerauswahl ohne Dialog

 

Schrotti
Herbert
Hallo alle miteinander,
Hab mal eine Frage zu Druckerauswahl und zwar ist es möglich direkt aus Xprofan einen Windowsdrucker ohne Dialog auszuwählen ( ausser den Standartdrucker) ?

Mein Problem ist das ich einmal einen Etikettendrucker und einmal den Pdf Creator verwende und das aus der gleichen Anwendung.

Bis jetzt hatte ich einen Posdrucker, welchen ich mit den Print# Befehlen füttere.
Der "neue" Drucker (Zebra Stripe 300) reagiert nicht mehr auf die Befehle, denke der versteht die Esc Sequenzen nimmer.
Hab mir gedacht löse das Problem einfach mit Sartprint .....Endprint usw.

Nur eben zuerst das Etikett auf dem Zebra dann eine Liste auf einem Netzwerkdrucker.

Hat vielleicht jemand eine Idee?

Bitte nicht zuviel Fachchinesisch da ich doch noch nicht allzuviel Ahnung habe.
 
10.01.2011  
 




Thomas
Freier
Mit den hier vorhanden Beispielen, würde ich einfach den Standarddrucker ermitteln, wenn er nicht der Zebra ist, diesen als Standarddrucker setzen, drucken, und den alten Standarddrucker wieder als solchen einstellen. Gibt bestimmt bessere Lösungen.
 
Gruß Thomas
Windows XP SP2, XProfan X2
10.01.2011  
 




Schrotti
Herbert
Hallo Thomas
Erstmal Danke für die Antwort.
Ja die Idee ist mir auch schon gekommen allerdings bin ich noch nicht draufgekommen wie ich das mach.Den Standartdrucker feststellen dafür hab ich einige Beispiele gefunden.
Zum umstellen aber nichts, oder bin ich blind vor Eifer......

Schöne Grüsse aus dem Alpenland / Herbert

Achja nebenher habe Winxp und Xprofan9
 
10.01.2011  
 



Schau mal Ermittlung (  [...]  ) :
DEF GetStandardPrinter(0) Substr$(ReadIni$("WIN.INI","Windows","Device"),1,",")
- also könnte equivalentes WriteIni funktionieren.
 
10.01.2011  
 




E.T.
Hab mal ein wenig "gebastelt":
'############### ##########
'Drucker auflisten
'Andreas Miethe * Juni 2003
'##########################
DEF EnumPrinters(7) ! "WINSPOOL.DRV","EnumPrintersA"
DEF GetStandardPrinter(0) Substr$(ReadIni$("WIN.INI","Windows","Device"),1,",")
DEF &PRINTER_ENUM_LOCAL 2
DEF &PRINTER_ENUM_DEFAULT 1
Declare PrinterValues#, Drucker$[], Y&, Old_Standard$, Old_Standard_rest$
DEF GetStandardPrinter2(0) ReadIni$("WIN.INI","Windows","Device")

Proc EnumPrinters

    Declare Printername&,Portname&,PrinterName$,PortName$,Attribs&
    Declare X&,dwNeeded&,dwReturned&
    EnumPrinters(&PRINTER_ENUM_LOCAL,0,5,0,0,ADDR(dwNeeded&),ADDR(dwReturned&))
    Dim PrinterValues#,dwNeeded&
    Clear PrinterValues#
    EnumPrinters(&PRINTER_ENUM_LOCAL ,0, 5, PrinterValues#, dwNeeded&, ADDR(dwNeeded&), ADDR(dwReturned&))

    While X& < dwReturned&*20

        Printername& = Long(PrinterValues#,x&)
        PrinterName$ = String$(Printername&,0)
        Attribs& = Long(PrinterValues#,x&+8)
        'folgendes funzt bei mir unter XP nicht:
        '	     If Attribs& & $4
        '            Printername$ = Printername$ + " => Standarddrucker"
        '       endif
        Drucker$[Y&] = Printername$
        X& = X& + 20
        inc Y&

    EndWhile

    Dispose PrinterValues#

Endproc

Proc Set_Std_Printer

    Parameters PrinterString$
    WriteIni "WIN.INI","Windows","Device"=PrinterString$

EndProc

cls
EnumPrinters
Print "Gefundene Drucker"

WhileLoop 0,Y&-1

    Print "Drucker " + @str$(&loop) + " : " + Drucker$[&loop]

EndWhile

Old_Standard$ = Substr$(GetStandardPrinter2(),1,",")
Old_Standard_rest$ = Substr$(GetStandardPrinter2(),-2,",") + "," + Substr$(GetStandardPrinter2(),-1,",")
Print "***"
Print "Standard-Drucker :"
Print Old_Standard$
Print "***"
Print "Drucke auf Drucker " + Drucker$[4]
Set_Std_Printer Drucker$[4] + "," +Old_Standard_rest$
StartPrint
DrawText 10,10,"Test " + Drucker$[4]
EndPrint
Print "Drucke auf Drucker " + Drucker$[2]
Set_Std_Printer Drucker$[2]+","+Old_Standard_rest$
StartPrint
DrawText 10,10,"Test " + Drucker$[2]
EndPrint
Print "***"
Print "   >>>alten Standart-Drucker wieder einstellen.."
Set_Std_Printer Old_Standard$+","+Old_Standard_rest$
Print "Standard : " + Old_Standard$
Print "***"
Print ""
Print "...warte"
waitinput
end

erzeugt bei mir folgendes Fenster (sieht nat. bei jedem anders aus, je nach install. Druckern...)



und funktioniert wunderbar. Bei pdf kommt die Abfrage "wo speichern", und bei Fax wird nach 'ner Fax-Nummer gefragt. Also werden die Drucker richtig gesetzt.

Möge jeder daraus machen, was er will ...

64 kB
Hochgeladen:11.01.2011
Ladeanzahl339
Herunterladen
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
11.01.2011  
 




Thomas
Freier
Vielleicht auch so als Anregung.
Beim Programmstart "sammel" ich die Drucker ein
var Lv.p&=Create("ListBox", %hwnd, 1, 0, 0, 0, 0)' Liste der Drucker
ClearList
EnumPrinters
MoveListToHandle(Lv.p&)
stdprinter$ = GetStandardPrinter(1)
Std_Druck$=stdprinter$
SetText Stat&, 2, "Drucker: "+Std_Druck$
auf EnumPrinters ist ja hier eingegangen worden.

Und mache dann einen Menüpunkt zur Auswahl
PopUp "Drucker"
x%=200

WhileLoop GetCount(Lv.p&)

    AppendMenu (x%+&Loop),substr$(GetString$(Lv.p&,(&loop-1)),1,"|")
    CheckMenu (x%+&Loop),val(substr$(GetString$(Lv.p&,(&loop-1)),-1,"|"))

EndWhile


Umstellen über

mit
Proc STAND_DRUCKER

    Parameters p.Item%

    WhileLoop GetCount(Lv.p&)

        CheckMenu (200+&Loop),0

    EndWhile

    stdevice$=@GetString$(LV.p&,(p.Item%-201))
    stdriv$= @ADD$(@substr$(@readini$("win.ini","devices",stdevice$),1,","),".drv")
    stport$=@substr$(@readini$("win.ini","devices",stdevice$),2,",")
    zusammen$=stdevice$;",";substr$(stdriv$,1,".");",";stport$
    writeini "win.ini","windows","device"=zusammen$
    SendMessage($FFFF,$001A,0,"windows")
    Std_Druck$=stdevice$
    SetText Stat&, 2, "Drucker: "+Std_Druck$
    CheckMenu p.Item%,1

EndProc


Und/ oder die Drucker-Grundeinstellung anbieten, wenn kein Dialog verwendet wird
Elseif Menuitem(2002)'-- 'Druckergrundeinstellung

shell "control printers"

Ist die auch noch unter WIN7 gültig?
 
Gruß Thomas
Windows XP SP2, XProfan X2
11.01.2011  
 




Dieter
Zornow
@ET:

dein Old_Standard_rest$ kann schwer schiefgehen, wenn Windows das nicht selbst korrigiert. Nicht jeder Drucker hat den gleichen Port usw.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
11.01.2011  
 




E.T.
Dieter Zornow (11.01.11)
dein Old_Standard_rest$ kann schwer schiefgehen, wenn Windows das nicht selbst korrigiert. Nicht jeder Drucker hat den gleichen Port usw.


Dieser Old_Standard_rest$  ist ja eigentlich nur ein Verweis für 16-Bit-Programme, damit diese ihre Druckaufträge an den Spooler schicken können (Kompatiblität - steht auch nicht in der Win.ini sondern unter HKEY_CURRENT_USER\Printers).

Habs mal umgeschrieben, so das (bei mir) der passende Eintrag geschrieben wird:
'############### ##########
'Drucker auflisten
'Andreas Miethe * Juni 2003
'##########################
DEF EnumPrinters(7) ! "WINSPOOL.DRV","EnumPrintersA"
DEF GetStandardPrinter(0) Substr$(ReadIni$("WIN.INI","Windows","Device"),1,",")
DEF &PRINTER_ENUM_LOCAL 2
DEF &PRINTER_ENUM_DEFAULT 1
Declare PrinterValues#, Drucker$[], Y&, Old_Standard$, Old_Standard_rest$
DEF GetStandardPrinter2(0) ReadIni$("WIN.INI","Windows","Device")

Proc EnumPrinters

    Declare Printername&,Portname&,PrinterName$,PortName$,Attribs&
    Declare X&,dwNeeded&,dwReturned&
    EnumPrinters(&PRINTER_ENUM_LOCAL,0,5,0,0,ADDR(dwNeeded&),ADDR(dwReturned&))
    Dim PrinterValues#,dwNeeded&
    Clear PrinterValues#
    EnumPrinters(&PRINTER_ENUM_LOCAL ,0, 5, PrinterValues#, dwNeeded&, ADDR(dwNeeded&), ADDR(dwReturned&))

    While X& < dwReturned&*20

        Printername& = Long(PrinterValues#,x&)
        PrinterName$ = String$(Printername&,0)
        Attribs& = Long(PrinterValues#,x&+8)
        'folgendes funzt bei mir unter XP nicht:
        '	     If Attribs& & $4
        '            Printername$ = Printername$ + " => Standarddrucker"
        '       endif
        Drucker$[Y&] = Printername$ + ",winspool,Ne0" + @str$(Y&) + ":"
        X& = X& + 20
        inc Y&

    EndWhile

    Dispose PrinterValues#

Endproc

Proc Set_Std_Printer

    Parameters PrinterString$
    WriteIni "WIN.INI","Windows","Device"=PrinterString$

EndProc

cls
EnumPrinters
Print "Gefundene Drucker"

WhileLoop 0,Y&-1

    Print "Drucker " + @str$(&loop) + " : " + Substr$(Drucker$[&loop],1,",")

EndWhile

Print "***"
Print "Standard-Drucker :"
Old_Standard$ = ReadIni$("WIN.INI","Windows","Device")
Print Substr$(Old_Standard$,1,",")
Print "***"
Print "Setze Std.-Drucker : " + Substr$(Drucker$[4],1,",")
Set_Std_Printer Drucker$[4]
Print " Drucke auf Drucker : " + Substr$(Drucker$[4],1,",")
StartPrint
DrawText 10,10,"Test " + Drucker$[4]
EndPrint
Print "***"
Print "Setze Std.-Drucker auf : " + Substr$(Drucker$[2],1,",")
Set_Std_Printer Drucker$[2]
Print " Drucke auf Drucker : " + Substr$(Drucker$[2],1,",")
StartPrint
DrawText 10,10,"Test " + Drucker$[2]
EndPrint
Print "***"
Print ">>>alten Standart-Drucker wieder einstellen.."
Set_Std_Printer Old_Standard$
Print " Standard : " + Substr$(Old_Standard$,1,",")
Print "***"
Print ""
Print "...warte"
waitinput
end
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
11.01.2011  
 



Erstmal DANKE für die vielen Antworten, jetzt kann ich mir wirklich aussuchen wie ich das mache. Super bin zwar noch nicht dazu gekommen es umzusetzen,werd aber Bericht erstatten sobald geschehen.

Grüsse aus dem Alpenland / Herbert
 
16.01.2011  
 




Erasmus.Herold
TOP !!!

Das habe ich gesucht.

Gruß - Erasmus
 
09.07.2019  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

18.331 Betrachtungen

Unbenanntvor 0 min.
Tommy13.02.2023
Erasmus.Herold21.01.2023
Axel Berse27.07.2022
p.specht12.06.2021
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie