Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Changing Orientation and Papersize of Network Printer
Message
Information générale
Forum:
Visual Basic
Catégorie:
Fonctions API de Windows
Divers
Thread ID:
00774004
Message ID:
00774359
Vues:
14
Hi,

I an mot sure about VB, but in MS Access mentioned properties can be saved together with a report.

Just my 2 cents.


>Hi everyone,
>
>I need to print 11x17 landscape documents from an ActiveX viewer control through VB. I need to ensure that a proper printer is selected as the Windows default printer and set the right page size and orientation before printing, and then return the Windows default printer back to it's previous setting upon completion of the print.
>
>I have code that works fine to do this for local printers, but have made no progress at all on getting it to work on network attached printers. Unfortunately, ALL of the printers that will be used for this are network attached printers.
>
>OpenPrinter cannot seem to open a remote printer.
>
>How can you change settings for a remote network printer??
>
>Thanks for any help,
>
>Steve Finch
>
>Here's the sample code I'm using to set the orientation:
>
>
>
>Public Enum PrinterOrientationConstants
>    OrientPortrait = 1
>    OrientLandscape = 2
>End Enum
>
>Private Type DEVMODE
>    dmDeviceName As String * 32
>    dmSpecVersion As Integer
>    dmDriverVersion As Integer
>    dmSize As Integer
>    dmDriverExtra As Integer
>    dmFields As Long
>    dmOrientation As Integer
>    dmPaperSize As Integer
>    dmPaperLength As Integer
>    dmPaperWidth As Integer
>    dmScale As Integer
>    dmCopies As Integer
>    dmDefaultSource As Integer
>    dmPrintQuality As Integer
>    dmColor As Integer
>    dmDuplex As Integer
>    dmYResolution As Integer
>    dmTTOption As Integer
>    dmCollate As Integer
>    dmFormName As String * 32
>    dmUnusedPadding As Integer
>    dmBitsPerPel As Integer
>    dmPelsWidth As Long
>    dmPelsHeight As Long
>    dmDisplayFlags As Long
>    dmDisplayFrequency As Long
>End Type
>
>Private Type PRINTER_DEFAULTS
>    pDataType As String
>    pDevMode As Long
>    DesiredAccess As Long
>End Type
>
>Private Type PRINTER_INFO_2
>    pServerName As Long
>    pPrinterName As Long
>    pShareName As Long
>    pPortName As Long
>    pDriverName As Long
>    pComment As Long
>    pLocation As Long
>    pDevMode As Long
>    pSepFile As Long
>    pPrintProcessor As Long
>    pDataType As Long
>    pParameters As Long
>    pSecurityDescriptor As Long
>    Attributes As Long
>    Priority As Long
>    DefaultPriority As Long
>    StartTime As Long
>    UntilTime As Long
>    Status As Long
>    cJobs As Long
>    AveragePPM As Long
>End Type
>
>Private Const DM_IN_BUFFER As Long = 8
>Private Const DM_OUT_BUFFER As Long = 2
>Private Const DM_ORIENTATION As Long = &H1
>Private Const PRINTER_ACCESS_ADMINISTER As Long = &H4
>Private Const PRINTER_ACCESS_USE As Long = &H8
>Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
>Private Const PRINTER_ALL_ACCESS = _
>    (STANDARD_RIGHTS_REQUIRED _
>    Or PRINTER_ACCESS_ADMINISTER Or _
>    PRINTER_ACCESS_USE)
>
>Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
>    (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
>
>Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, _
>    phPrinter As Long, pDefault As Any) As Long
>
>Private Declare Function ClosePrinter Lib "winspool.drv" _
>    (ByVal hPrinter As Long) As Long
>
>Private Declare Function DocumentProperties Lib "winspool.drv" _
>    Alias "DocumentPropertiesA" (ByVal hWnd As Long, _
>    ByVal hPrinter As Long, ByVal pDeviceName As String, _
>    pDevModeOutput As Any, pDevModeInput As Any, ByVal fmode As Long) As Long
>
>Private Declare Function GetPrinter Lib "winspool.drv" _
>    Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
>    pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As Long
>
>Private Declare Function SetPrinter Lib "winspool.drv" _
>    Alias "SetPrinterA" (ByVal hPrinter As Long, _
>    ByVal Level As Long, pPrinter As Any, ByVal Command As Long) As Long
>
>Public Function SetDefaultPrinterOrientation(ByVal eOrientation As PrinterOrientationConstants) As Boolean
>
>    Dim bDevMode() As Byte
>    Dim bPrinterInfo2() As Byte
>    Dim hPrinter As Long
>    Dim nSize As Long
>    Dim sPrnName As String
>    Dim dm As DEVMODE
>    Dim pd As PRINTER_DEFAULTS
>    Dim pi2 As PRINTER_INFO_2
>
>    On Error GoTo ErrHandler
>
>    'Get device name of default printer
>    sPrnName = Printer.DeviceName
>
>    'PRINTER_ALL_ACCESS required under NT, because we're
>    'going to call SetPrinter
>    pd.DesiredAccess = PRINTER_ALL_ACCESS
>
>    'Get a handle to the printer.
>    If OpenPrinter(sPrnName, hPrinter, pd) Then
>        'Get number of bytes required
>        'for PRINTER_INFO_2 structure
>        Call GetPrinter(hPrinter, 2&, 0&, 0&, nSize)
>
>        'Create a buffer of the required size
>        ReDim bPrinterInfo2(1 To nSize) As Byte
>
>        'Fill buffer with structure
>        Call GetPrinter(hPrinter, 2, bPrinterInfo2(1), nSize, nSize)
>
>        'Copy fixed portion of structure into VB Type variable
>        Call CopyMemory(pi2, bPrinterInfo2(1), Len(pi2))
>
>        'Get number of bytes required for DEVMODE structure
>        nSize = DocumentProperties(0&, hPrinter, _
>            sPrnName, 0&, 0&, 0)
>
>        'Create a buffer of the required size
>        ReDim bDevMode(1 To nSize)
>
>        'If PRINTER_INFO_2 points to a DEVMODE structure,
>        'copy it into our buffer
>        If pi2.pDevMode Then
>            Call CopyMemory(bDevMode(1), ByVal pi2.pDevMode, Len(dm))
>        Else
>            'Otherwise, call DocumentProperties to get a
>            'DEVMODE structure
>            Call DocumentProperties(0&, hPrinter, sPrnName, _
>                bDevMode(1), 0&, DM_OUT_BUFFER)
>        End If
>
>        'Copy fixed portion of structure into VB Type variable
>        Call CopyMemory(dm, bDevMode(1), Len(dm))
>
>        With dm
>            'Set new orientation
>            .dmOrientation = eOrientation
>            .dmFields = DM_ORIENTATION
>        End With
>
>        'Copy our Type back into buffer
>        Call CopyMemory(bDevMode(1), dm, Len(dm))
>
>        'Set new orientation
>        Call DocumentProperties(0&, hPrinter, sPrnName, _
>            bDevMode(1), bDevMode(1), DM_IN_BUFFER Or _
>            DM_OUT_BUFFER)
>
>        'Point PRINTER_INFO_2 at our modified DEVMODE
>        pi2.pDevMode = VarPtr(bDevMode(1))
>
>        'Set new orinetation system wide
>        Call SetPrinter(hPrinter, 2, pi2, 0&)
>
>        'Clean up and exit
>        Call ClosePrinter(hPrinter)
>        SetDefaultPrinterOrientation = True
>
>    Else
>        SetDefaultPrinterOrientation = False
>    End If
>
>    Exit Function
>
>ErrHandler:
>
>    MsgBox "The following error occurred while resetting printer orientation." & vbCrLf & vbCrLf & _
>        "Error " & Err.Number & " - " & Err.Description, _
>        vbExclamation
>    SetDefaultPrinterOrientation = False
>
>End Function
>
>
Igor Gelin
Database Developer
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform