LinkBack Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default How to get the available printers list in a macro

Sonia,

Here is some code adapted from Randy Birch's site. I have assumed NT/XP< if
you have Win95 post back

If you want to read the comments, go see Randy's site.

Option Explicit

Public Type PRINTER_INFO_1
Flags As Long
prescription As Long
Pane As Long
Comment As Long
End Type

Public Type PRINTER_INFO_4
pPrinterName As Long
pServerName As Long
Attributes As Long
End Type

'SIZEOFxxx are non-windows constants defined for this method
Public Const SIZEOFPRINTER_INFO_1 = 16
Public Const SIZEOFPRINTER_INFO_4 = 12

Public Const PRINTER_LEVEL1 = &H1
Public Const PRINTER_LEVEL4 = &H4

'EnumPrinters enumerates available printers,
'print servers, domains, or print providers.
Public Declare Function EnumPrinters Lib "winspool.drv" _
Alias "EnumPrintersA" _
(ByVal Flags As Long, _
ByVal Name As String, _
ByVal Level As Long, _
pPrinterEnum As Any, _
ByVal cdBuf As Long, _
pcbNeeded As Long, _
pcReturned As Long) As Long

'EnumPrinters Parameters:
Public Const PRINTER_ENUM_DEFAULT = &H1

Public Const PRINTER_ENUM_LOCAL = &H2

Public Const PRINTER_ENUM_CONNECTIONS = &H4

Public Const PRINTER_ENUM_NAME = &H8

Public Const PRINTER_ENUM_REMOTE = &H10

Public Const PRINTER_ENUM_SHARED = &H20

Public Const PRINTER_ENUM_NETWORK = &H40

'PRINTER_INFO_4 returned Attribute values
Public Const PRINTER_ATTRIBUTE_DEFAULT = &H4
Public Const PRINTER_ATTRIBUTE_DIRECT = &H2
Public Const PRINTER_ATTRIBUTE_ENABLE_BIDI = &H800&
Public Const PRINTER_ATTRIBUTE_LOCAL = &H40
Public Const PRINTER_ATTRIBUTE_NETWORK = &H10
Public Const PRINTER_ATTRIBUTE_QUEUED = &H1
Public Const PRINTER_ATTRIBUTE_SHARED = &H8
Public Const PRINTER_ATTRIBUTE_WORK_OFFLINE = &H400

'PRINTER_INFO_1 returned Flag values
Public Const PRINTER_ENUM_CONTAINER = &H8000&
Public Const PRINTER_ENUM_EXPAND = &H4000
Public Const PRINTER_ENUM_ICON1 = &H10000
Public Const PRINTER_ENUM_ICON2 = &H20000
Public Const PRINTER_ENUM_ICON3 = &H40000
Public Const PRINTER_ENUM_ICON4 = &H80000
Public Const PRINTER_ENUM_ICON5 = &H100000
Public Const PRINTER_ENUM_ICON6 = &H200000
Public Const PRINTER_ENUM_ICON7 = &H400000
Public Const PRINTER_ENUM_ICON8 = &H800000

Public Const LB_SETTABSTOPS As Long = &H192

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long

Public Declare Function lstrcpyA Lib "kernel32" _
(ByVal RetVal As String, ByVal Ptr As Long) As Long

Public Declare Function lstrlenA Lib "kernel32" _
(ByVal Ptr As Any) As Long



Sub EnumPrintersWin()
Dim Success As Boolean
Dim cbRequired As Long
Dim cbBuffer As Long
Dim pntr() As PRINTER_INFO_4
Dim cEntries As Long
Dim iPrinter As Long
Dim sAttr As String
Dim sMsg As String

Call EnumPrinters(PRINTER_ENUM_CONNECTIONS Or PRINTER_ENUM_LOCAL, _
vbNullString, PRINTER_LEVEL4, _
0, 0, cbRequired, cEntries)

ReDim pntr((cbRequired \ SIZEOFPRINTER_INFO_4))

cbBuffer = cbRequired

If EnumPrinters(PRINTER_ENUM_CONNECTIONS Or PRINTER_ENUM_LOCAL, _
vbNullString, PRINTER_LEVEL4, _
pntr(0), cbBuffer, _
cbRequired, cEntries) Then

For iPrinter = 0 To cEntries - 1

With pntr(iPrinter)

sMsg = sMsg & GetStrFromPtrA(.pPrinterName) & vbCrLf

End With

Next iPrinter

MsgBox sMsg, vbInformation, "List of Printers"
Else
MsgBox "Error enumerating printers."
End If 'EnumPrinters


End Sub


Public Function GetStrFromPtrA(ByVal lpszA As Long) As String

GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)

End Function



--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)

" wrote in
message ...
is there a way to retrive the list of available printers
in a macro, so as to display the list in a msgbox.

Thanks
Sonia



 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
List of available printers prizm1 New Users to Excel 3 June 12th 05 01:32 PM
Network printers, how? CAA[_16_] Excel Programming 2 February 5th 04 05:09 PM
Printers & LPT Tom Excel Programming 0 November 26th 03 05:39 PM
Creating a printers list PO Excel Programming 2 November 14th 03 01:51 PM
List of Printers Bret Holle Excel Programming 1 September 27th 03 04:39 PM


All times are GMT +1. The time now is 11:44 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"