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