Changing printer orinetation for Windows 2000

This tip describes changing printer orinetation for Windows 2000.

This code chages the printer orientation in windows 2000.


This final code was adapted form a VB code posted by Frank Boudreau.

In a View Action, write the following code.

In the Options tab:
Option Public
Use "ChangePrinterOrientation"

In the Declarations tab:
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 In the Click tab: Dim result As Variant Dim printerName As String Dim nPos As String 'Get the printer name printerName = String(128, 0) result = GetProfileString("WINDOWS", "DEVICE", "", printerName, 127) nPos = Instr(printerName, ",") printerName = Left(printerName, nPos - 1) 'Set the default printer to landscape (printer name, landscape orientation) result = SetPrinterOrientation(printerName, 2) Create a Script Library named ChangePrinterOrientation with the code below. In the declarations tab: Type DIVT quot As Long remain As Long End Type Private Type PRINTER_DEFAULTS pDatatype As Long 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 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 dmICMMethod As Long dmICMIntent As Long dmMediaType As Long dmDitherType As Long dmReserved1 As Long dmReserved2 As Long End Type Declare Function ClosePrinter Lib "winspool.drv" (Byval hPrinter As Long) As Long Declare Function DocumentProperties Lib "winspool.drv"_ Alias "DocumentPropertiesA" (Byval hwnd As Long, _ Byval hPrinter As Long, Byval pDeviceName As String, _ pDevModeOutput As Long, pDevModeInput As Long, _ Byval fMode As Long) As Long Declare Function GetPrinter Lib "winspool.drv" Alias _ "GetPrinterA" (Byval hPrinter As Long, Byval Level As Long, _ pPrinter As Long, Byval cbBuf As Long, pcbNeeded As Long) As Long Declare Function OpenPrinter Lib "winspool.drv" Alias _ "OpenPrinterA" (Byval pPrinterName As String, phPrinter As Long, _ pDefault As PRINTER_DEFAULTS) As Long Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (Byval hPrinter As Long,_ Byval Level As Long, pPrinter As Long, Byval commandl As Long) As Long Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" _ (pDest As DEVMODE, pSource As Long, Byval cbLength As Long) Declare Sub CopyMemoryBack Lib "Kernel32" Alias "RtlMoveMemory" _ (pDest As Long, pSource As DEVMODE, Byval cbLength As Long) Declare Sub CopyMemoryPI Lib "Kernel32" Alias "RtlMoveMemory" _ (pDest As PRINTER_INFO_2, pSource As Long, Byval cbLength As Long) Declare Sub CopyMemoryBackPI Lib "Kernel32" Alias "RtlMoveMemory" _ (pDest As Long, pSource As PRINTER_INFO_2, Byval cbLength As Long) Declare Function labs Lib "msvcrt.dll" Alias "labs"_ (param As Long) As Long Declare Function ldiv Lib "msvcrt.dll" (Byval q As Long, divisor As Long) As Long In the SetPrinterOrientation function: Public Function SetPrinterOrientation(Byval sPrinterName As String,Byval orientation As Integer)
As Long Const DM_IN_BUFFER = 8 Const DM_OUT_BUFFER = 2 Const PRINTER_ACCESS_ADMINISTER = &H4 Const PRINTER_ACCESS_USE = &H8 Const STANDARD_RIGHTS_REQUIRED = &HF0000 Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _ PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE) Dim hPrinter As Long Dim pd As PRINTER_DEFAULTS Dim pinfo As PRINTER_INFO_2 Dim dm As DEVMODE Dim dm2 As DEVMODE Dim yDevModeData() As Long Dim yPInfoMemory() As Long Dim nBytesNeeded As Long Dim nRet As Long, nJunk As Long Dim q As Long On Error Goto cleanup 'Open printer with all access to be able to modify settings pd.DesiredAccess = PRINTER_ALL_ACCESS nRet = OpenPrinter(sPrinterName, hPrinter, pd) nRet = DocumentProperties(0, hPrinter, sPrinterName, 0, 0, 0) If (nRet < 0) Then Msgbox "Cannot get the size of the DEVMODE structure." Goto cleanup End If Redim yDevModeData(nRet + 100) As Long nRet = DocumentProperties(0, hPrinter, sPrinterName, yDevModeData(0), 0, DM_OUT_BUFFER) If (nRet < 0) Then Msgbox "Cannot get the DEVMODE structure." Goto cleanup End If Call CopyMemory(dm, yDevModeData(0), Len(dm)) dm.dmOrientation = orientation Call CopyMemoryBack(yDevModeData(0), dm, Len(dm)) nRet = DocumentProperties(0, hPrinter, sPrinterName, _ yDevModeData(0), yDevModeData(0), _ DM_IN_BUFFER Or DM_OUT_BUFFER) If (nRet < 0) Then Msgbox "Unable to set some settings to this printer." Goto cleanup End If Call GetPrinter(hPrinter, 2, 0, 0, nBytesNeeded) If (nBytesNeeded = 0) Then Goto cleanup Redim yPInfoMemory(nBytesNeeded + 100) As Long nRet = GetPrinter(hPrinter, 2, yPInfoMemory(0), nBytesNeeded, nJunk) If (nRet = 0) Then Msgbox "Unable to get shared printer settings." Goto cleanup End If Call CopyMemoryPI(pinfo, yPInfoMemory(0), Len(pinfo)) pinfo.pDevmode = labs(yDevModeData(0)) pinfo.pSecurityDescriptor = 0 Call CopyMemoryBackPI(yPInfoMemory(0), pinfo, Len(pinfo)) nRet = SetPrinter(hPrinter, 2, yPInfoMemory(0), 0) If (nRet = 0) Then Msgbox "Unable to set shared printer settings." End If SetPrinterOrientation = nRet cleanup: If (hPrinter <> 0) Then Call ClosePrinter(hPrinter) End Function
This was first published in February 2003

Dig deeper on LotusScript

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

SearchWinIT

Search400

  • iSeries tutorials

    Search400.com's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...

SearchEnterpriseLinux

SearchVirtualDataCentre.co.uk

Close