SetPrinter

Just starting out? Need help? Post your questions and find answers here.
Little_man
Enthusiast
Enthusiast
Posts: 143
Joined: Fri Mar 29, 2013 4:55 pm
Location: The Netherland

SetPrinter

Post by Little_man »

I am using Windows 10 with purebasic 5.72.

How to define a printer with SetPrinter("Name").
No dialog box, so not using "PrintRequester()"

Little_man
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4635
Joined: Sun Apr 12, 2009 6:27 am

Re: SetPrinter

Post by RASHAD »

Hi
If you know the name you can use

Code: Select all

Procedure SetDefaultPrinter_(DeviceLine.s)
  WriteProfileString_("windows", "Device", DeviceLine)
  SendMessage_(#HWND_BROADCAST, #WM_WININICHANGE, 0, "windows")
EndProcedure 

SetDefaultPrinter_(Name.s)
Else

Code: Select all

Structure Printers 
  P.s 
EndStructure

Global NewList Printers.Printers() 

Procedure GetPrinterList()  
  ClearList(Printers())  
  enumFlags = #PRINTER_ENUM_LOCAL | #PRINTER_ENUM_CONNECTIONS
  If EnumPrinters_(enumFlags, #Null, 1, 0, 0, @deviceNamesBufferSize, @printerCount) = 0
    deviceNamesBuffer = AllocateMemory(deviceNamesBufferSize)
    If deviceNamesBuffer And EnumPrinters_(enumFlags, #Null, 1, 
                                           deviceNamesBuffer, deviceNamesBufferSize, @sizeRDB, @printerCount)
      If printerCount
        pInfoNameOffset = OffsetOf(PRINTER_INFO_1\pName)
        For i = 0 To (printerCount - 1)
          AddElement(Printers())
          Printers()\P = PeekS(PeekL(deviceNamesBuffer + 
                                     i * (SizeOf(PRINTER_INFO_1)) + pInfoNameOffset))
        Next
      EndIf
      FreeMemory(deviceNamesBuffer)
    EndIf
  EndIf     
EndProcedure

Procedure.s GetDefaultPrinter() 
  PrinterName$ = Space(#MAX_PATH)
  GetPrivateProfileString_("WINDOWS","DEVICE","", @PrinterName$, #MAX_PATH, "Win.Ini")
  PrinterName$ = StringField(PrinterName$, 1,",")
  ProcedureReturn PrinterName$
EndProcedure 

Procedure SetDefaultPrinter_(DeviceLine.s) 
  WriteProfileString_("windows", "Device", DeviceLine) 
  SendMessage_(#HWND_BROADCAST, #WM_WININICHANGE, 0, "windows") 
EndProcedure 

GetPrinterList()
ResetList(Printers())

LoadFont(0,"Tahoma",12)

OpenWindow(0,0,0,400,220,"Printer Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListViewGadget(0,10,10,380,150)
SetGadgetColor(0,#PB_Gadget_BackColor,$D8FEFD)
SetGadgetColor(0,#PB_Gadget_FrontColor,$F7001A)
ButtonGadget(1,10,170,60,20,"Select")
If CreateStatusBar(0, WindowID(0))
  AddStatusBarField(400)
EndIf
StatusBarText(0, 0, "No Printer Selected",#PB_StatusBar_Center)
SetGadgetFont(0,FontID(0))
While NextElement(Printers())
  AddGadgetItem(0, x, Str(x)+"  :  "+ Printers()\P)
  x+1
Wend 
Repeat
  Select WaitWindowEvent()
      
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          SelectElement(Printers(), GetGadgetState(0))
          Buffer$ = Space(#MAX_PATH)
          bufsize = #MAX_PATH
          GetDefaultPrinter()
          StatusBarText(0, 0, Printers()\P,#PB_StatusBar_Center)   
          If Buffer$ <> Printers()\P                
            SetDefaultPrinter_(Printers()\P)                   
          EndIf
          Quit = 1
          
      EndSelect          
      
  EndSelect 
  
Until Quit = 1
End 
Or

Code: Select all

;Autor: ts-soft 
;http://www.purebasic.fr/german/viewtopic.php?p=263605#p263605

EnableExplicit

Prototype.i SetDefaultPrinter(Printer.p-unicode)

Procedure.i SetDefaultPrinter(Printer.s)
  Protected DLL.i = OpenLibrary(#PB_Any, "winspool.drv")
  Protected _SetDefaultPrinter.Setdefaultprinter
  Protected Result.i
 
  If DLL
    _SetDefaultPrinter = GetFunction(DLL, "SetDefaultPrinterW")
    If _SetDefaultPrinter
      Result = _SetDefaultPrinter(Printer)
    EndIf
    CloseLibrary(DLL)
  EndIf
 
  ProcedureReturn Result
EndProcedure

If SetDefaultPrinter("Adobe PDF");Anpassen
  Debug "Standard-Drucker wurde festgelegt."
Else
  Debug "Standard-Drucker konnte nicht festgelegt werden."
EndIf
Egypt my love
Little_man
Enthusiast
Enthusiast
Posts: 143
Joined: Fri Mar 29, 2013 4:55 pm
Location: The Netherland

Re: SetPrinter

Post by Little_man »

Thanks "RASHAD" for the information.

Little_man
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4635
Joined: Sun Apr 12, 2009 6:27 am

Re: SetPrinter

Post by RASHAD »

You are welcome
Egypt my love
User avatar
VB6_to_PBx
Enthusiast
Enthusiast
Posts: 617
Joined: Mon May 09, 2011 9:36 am

Re: SetPrinter

Post by VB6_to_PBx »

is it possible to get the User's
FontName
FontStyle
FontSize
for Window's NotePad.exe
then change all 3 to Print some text thru User' NotePad program ,
then change all 3 back to User's original settings .
 
PureBasic .... making tiny electrons do what you want !

"With every mistake we must surely be learning" - George Harrison
Post Reply