Hallo zusammen,
zwischenzeitlich habe ich eine Möglichkeit gefunden, das Standard-Papierfach eines beliebigen Druckers auszulesen. Ich benutze dazu die DEVMODE-Funktionalität.
Gruss
Rainer
'---------------------------------------------------------------------
Public Sub ReadDevModeB(PrinterName As String, ByRef xdev As DEVMODEA)
'---------------------------------------------------------------------
Dim nSize As Long ' Size of DEVMODE
Dim PrinterHandle As Long ' handle to printer
Dim aDevMode() As Byte ' temporary DEVMODE
' ------------------------------------------------------
' Drucker-Handle ermitteln
' ------------------------------------------------------
If OpenPrinter(PrinterName, PrinterHandle, 0&) Then
' --------------------------------------------------
' Größe der DevMode-Struktur ermitteln
' --------------------------------------------------
nSize = DocumentProperties(Screen.ActiveForm.hWnd, PrinterHandle, _
PrinterName, 0&, 0&, 0)
' --------------------------------------------------
' Speicher reservieren
' --------------------------------------------------
ReDim aDevMode(1 To nSize)
' --------------------------------------------------
' DevMode-Struktur in temporäre Variable schreiben
' --------------------------------------------------
nSize = DocumentProperties(Screen.ActiveForm.hWnd, PrinterHandle, _
PrinterName, aDevMode(1), 0&, DM_OUT_BUFFER)
' --------------------------------------------------
' Temporäre Variable in DevMode-Struktur kopieren
' --------------------------------------------------
Call CopyMemory(xdev, aDevMode(1), Len(xdev))
xdev.dmDriverExtra = 0
' --------------------------------------------------
' Drucker schließen
' --------------------------------------------------
ClosePrinter (PrinterHandle)
End If
End Sub
' -----------------------------------------------------
' Default-Papierfach ermitteln
' -----------------------------------------------------
Public Sub GetDefaultBin(ByRef xdev As DEVMODEA)
With Screen.ActiveForm
DefaultFach = xdev.dmDefaultSource
End With
End Sub |