Paste the following code into it’s own BAS module (or convert it to a class if required)
'MS Windows API Function Prototypes
private Declare Function GetProfileString Lib "kernel32" Alias _
"GetProfileStringA" (byval lpAppName as string, _
byval lpKeyName as string, byval lpDefault as string, _
byval lpReturnedString as string, _
byval nSize as Long) as Long
'---------------------------------------------------------------
' Retreive the vb object "printer" corresponding to the window's
' default printer.
'---------------------------------------------------------------
public Function GetDefaultPrinter() as Printer
Dim strBuffer as string * 254
Dim iRetValue as Long
Dim strDefaultPrinterInfo as string
Dim tblDefaultPrinterInfo() as string
Dim objPrinter as Printer
' Retreive current default printer information
iRetValue = GetProfileString("windows", "device", ",,,", _
strBuffer, 254)
strDefaultPrinterInfo = Left(strBuffer, InStr(strBuffer, Chr(0)) - 1)
tblDefaultPrinterInfo = Split(strDefaultPrinterInfo, ",")
for Each objPrinter In Printers
If objPrinter.DeviceName = tblDefaultPrinterInfo(0) then
' Default printer found !
Exit for
End If
next
' If not found, return nothing
If objPrinter.DeviceName <> tblDefaultPrinterInfo(0) then
set objPrinter = nothing
End If
set GetDefaultPrinter = objPrinter
End Function
Now to test the routine, place the following code into a Form_Load routine :
private Sub Form_Load()
Dim objPrinter as Printer
set objPrinter = GetDefaultPrinter()
MsgBox "Default printer is: " + objPrinter.DeviceName
MsgBox "Driver name is: " + objPrinter.DriverName
MsgBox "Port is: " + objPrinter.Port
set objPrinter = nothing
End
End Sub