Seite 2 von 2

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 18:44
von Gerold61
Super, das ist die Lösung.
Da wäre ich von allein nicht drauf gekommen.
Danke.

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 20:55
von Mok
Hui, und das ganze auch noch ohne WinAPI!
Toller Code :allright:

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 20:58
von ts-soft
Mok hat geschrieben:Hui, und das ganze auch noch ohne WinAPI!
Biste da sicher :lol:

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 21:11
von Mok
ts-soft hat geschrieben:
Mok hat geschrieben:Hui, und das ganze auch noch ohne WinAPI!
Biste da sicher :lol:
Nja, ich hab den Code nur überflogen und sogar mit Firefox nach _() gesucht und nachdem ich nüscht gefunden hab bin ich mal davon ausgegangen... trotzdem toller Broken Code, den du hier geschrieben hast!

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 21:23
von ts-soft
Es werden nur 2 API-Funktionen aufgerufen, die leider nicht vordefiniert sind, da es sich
um Treiber handelt. Also viel Code ist es nicht, das normalle Vorgehen, wenn man
Funktionen aus einer DLL aufruft, also mit Prototypes, Unicode und Ansi kompatibel,
sowieso x86 und x64.

Sieht also nur Fett aus, ist aber ganz Mager, auch für Diabetiker geeignet :mrgreen:

Re: Drucker dauerhaft wählen

Verfasst: 10.01.2010 17:23
von Mok
ts-soft hat geschrieben:Sieht also nur Fett aus, ist aber ganz Mager, auch für Diabetiker geeignet :mrgreen:
Made my day :bounce:

Re: Drucker dauerhaft wählen

Verfasst: 13.01.2010 16:38
von hjbremer
wenn es nur darum geht den Defaultdrucker umzustellen

Code: Alles auswählen

printername$ = #DQUOTE$ + "KODAK ESP 5 AiO" + #DQUOTE$

;wird Standarddrucker !!!
pn$ = "/y /n " + printername$
rpg = RunProgram("RUNDLL32", "PRINTUI.DLL, PrintUIEntry " + pn$, "", #PB_Program_Open )

jeweils am Anfang und Ende mit den entsprechenden Druckernamen aufrufen

Re: Drucker dauerhaft wählen

Verfasst: 02.10.2010 16:20
von Max_der_Held
obwohl das heir schon lange her ist (ich habs trotzdem erst nicht gefunden)

hier eine andere lösungsmöglichkeit mit GetProfileString_() und writeprofilestring_()
wobei die ersten 2 proceduren von gnozal sind (codearchiv 4.0)

Code: Alles auswählen

Structure Printers 
  P.s 
EndStructure 

Global NewList Printers.Printers() 

Procedure GetPrinterList() 
  
  ClearList(Printers()) 
  
  Buffersize.l  = 8102 
  *Buffer       = AllocateMemory(Buffersize) 
  TempPrinter.s = Space(1024) 
  
  If GetProfileString_("devices",0,"",*Buffer,Buffersize) 
    TempString.s = PeekS(*Buffer) 
    Length = Len(TempString) 
    While TempString <> "" 
     GetPrivateProfileString_("devices",TempString,"",TempPrinter,1024,"Win.Ini") 
     AddElement(Printers()) 
     Printers()\P = TempString+","+StringField(TempPrinter,1,",")+","+StringField(TempPrinter,2,",") 
     TempString = PeekS(*Buffer+Length + 1) 
     Length = Length + Len(TempString) + 1 
     TempString = PeekS(*Buffer+Length + 1) 
    Wend 
  Else 
    MessageRequester("Error","No printer installed",64) 
  EndIf 
  
  FreeMemory(*Buffer) 

EndProcedure 
; ------------ 
; Set default printer (should work for all windows versions) 
Procedure Setdefaultprinter_(DeviceLine.s) 
  
  ;DeviceLine=PrinterName,DriverName,PrinterPort 
  ;Store the new printer information in the 
  ; [WINDOWS] section of the WIN.INI file for 
  ;the DEVICE= item 
  WriteProfileString_("windows", "Device", DeviceLine) 
    
  ;Cause all applications To reload the INI file 
  SendMessage_(#HWND_BROADCAST, #WM_WININICHANGE, 0, "windows") 

EndProcedure 

Procedure.s druck_GetcurrentPrinter()
   Protected str.s = Space(100)
   GetProfileString_ ("windows", "Device", "", @str,101)
   
   ProcedureReturn str 
EndProcedure 
lg
max

Re: Drucker dauerhaft wählen

Verfasst: 03.11.2016 10:14
von michstro
Hallo,
ich habe zu dem relativ altem Thema eine Frage,
wenn ich versuche den Printer mit

Code: Alles auswählen

Procedure MeinDrucker()
  If PrintRequester()
    If StartPrinting("Test")
      Default_Printer = Getdefaultprinter()
      Debug Default_Printer
    StopPrinting()
    EndIf 
  EndIf
EndProcedure
auszulesen dann funktioniert das wirklich nur wenn ich auch einen Startprinting Befehl sende. Was auf dem Drucker ein leeres Blatt ausdruckt.
Wie kann ich das umgehen, oder wo ist mein Fehler.

Ich möchte jetzt nicht meinen eigenen PrintRequester schreiben, aber wie kann ich den Printrequester verwenden und dann den Drucker auslesen?
Viele Grüsse
Michael