Drucker dauerhaft wählen

Anfängerfragen zum Programmieren mit PureBasic.
Gerold61
Beiträge: 12
Registriert: 09.01.2010 12:05
Computerausstattung: WIN 10
PureBasic 7.52 für Windows (x64 64-bit)
Wohnort: Cuxhaven

Re: Drucker dauerhaft wählen

Beitrag von Gerold61 »

Super, das ist die Lösung.
Da wäre ich von allein nicht drauf gekommen.
Danke.
PureBasic 4.4
XP SP3
INTEL CORE QUAD
2 GB
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Drucker dauerhaft wählen

Beitrag von Mok »

Hui, und das ganze auch noch ohne WinAPI!
Toller Code :allright:
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Drucker dauerhaft wählen

Beitrag von ts-soft »

Mok hat geschrieben:Hui, und das ganze auch noch ohne WinAPI!
Biste da sicher :lol:
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Drucker dauerhaft wählen

Beitrag 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!
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Drucker dauerhaft wählen

Beitrag 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:
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Drucker dauerhaft wählen

Beitrag 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:
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Drucker dauerhaft wählen

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Drucker dauerhaft wählen

Beitrag 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
michstro
Beiträge: 16
Registriert: 06.02.2011 16:42

Re: Drucker dauerhaft wählen

Beitrag 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
Antworten