Die übliche Strategie ist, den Bericht für den Standarddrucker zu entwerfen und dann den Standarddrucker über die API umzusetzen, z.B. so:
Public Const HWND\_BROADCAST = &HFFFF
Public Const WM\_WININICHANGE = &H1A
Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
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
Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Public Function SetDefaultPrinter(PrName As String)
' Parameter: Druckername
' Rückgabewert: Erfolg der Aktion
Dim Buffer As String, RW, Tmp As String
On Error GoTo Er
Buffer = String(255, 0)
RW = GetProfileString(ByVal "devices", ByVal PrName, ByVal "", Buffer, Len(Buffer))
If RW 1 Then
SetDefaultPrinter = False
Exit Function
End If
' und mitteilen, daß sich die WIN.INI geändert hat
RW = SendMessage(HWND\_BROADCAST, WM\_WININICHANGE, 0&, 0&:wink:
SetDefaultPrinter = True
Ex:
Exit Function
Er:
MsgBox "SetDefaultPrinter: " & Err.Description
SetDefaultPrinter = False
Resume Ex
End Function
Reinhard