怎么改变打印纸的方向?添加一个模块:Public Enum PrinterOrientationConstants OrientPortrait = 1 OrientLandscape = 2End EnumPrivate 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 LongEnd TypePrivate Type PRINTER_DEFAULTS pDataType As String pDevMode As Long DesiredAccess As LongEnd TypePrivate 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 LongEnd TypePrivate Const DMPAPER_A2 = 66Private Const DMPAPER_A3 = 8Private Const DMPAPER_A4 = 9Private Const DMPAPER_A5 = 11Private Const DMPAPER_B4 = 12Private Const DMPAPER_B5 = 13Private Const DM_IN_BUFFER As Long = 8Private Const DM_OUT_BUFFER As Long = 2Private Const DM_ORIENTATION As Long = &H1Private Const DM_PAPERSIZE = &H2&Private Const PRINTER_ACCESS_ADMINISTER As Long = &H4Private Const PRINTER_ACCESS_USE As Long = &H8Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000Private 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 LongPrivate Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As LongPrivate 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 LongPrivate 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 LongPrivate Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal Command As Long) As LongFunction SetDefaultPrinterOrientation(ByVal eOrientation As _ PrinterOrientationConstants) As Boolean Dim bDevMode() As Byte Dim bPrinterInfo2() As Byte Dim hPrinter As Long Dim lResult 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 ' 获取默认打印机的设备名称 sPrnName = Printer.DeviceName ' 由于要调用SetPrinter,所以 ' 如果是在NT下就要求PRINTER_ALL_ACCESS pd.DesiredAccess = PRINTER_ALL_ACCESS ' 获取打印机句柄 If OpenPrinter(sPrnName, hPrinter, pd) Then ' 获取PRINTER_INFO_2结构要求的字节数 Call GetPrinter(hPrinter, 2&, 0&, 0&, nSize) ReDim bPrinterInfo2(1 To nSize) As Byte lResult = GetPrinter(hPrinter, 2, bPrinterInfo2(1), nSize, nSize) Call CopyMemory(pi2, bPrinterInfo2(1), Len(pi2)) nSize = DocumentProperties(0&, hPrinter, sPrnName, 0&, 0&, 0) ReDim bDevMode(1 To nSize) If pi2.pDevMode Then Call CopyMemory(bDevMode(1), ByVal pi2.pDevMode, Len(dm)) Else Call DocumentProperties(0&, hPrinter, sPrnName, bDevMode(1), 0&, DM_OUT_BUFFER) End If Call CopyMemory(dm, bDevMode(1), Len(dm)) With dm ' 设置新的走向 .dmOrientation = eOrientation .dmFields = DM_ORIENTATION '.dmPaperSize = DMPAPER_A5 将纸张大小设为A5,请自行更改所需大小 '.dmFields = DM_PAPERSIZE 必须,否则无法设置纸张大小 End With Call CopyMemory(bDevMode(1), dm, Len(dm)) Call DocumentProperties(0&, hPrinter, sPrnName, _ bDevMode(1), bDevMode(1), DM_IN_BUFFER Or _ DM_OUT_BUFFER) pi2.pDevMode = VarPtr(bDevMode(1)) lResult = SetPrinter(hPrinter, 2, pi2, 0&) Call ClosePrinter(hPrinter) SetDefaultPrinterOrientation = True Else SetDefaultPrinterOrientation = False End IfEnd Function 调用的时候:SetDefaultPrinterOrientation OrientPortrait ‘为纵向SetDefaultPrinterOrientation OrientLandscape ‘为横向
解决方案 »
- VB6 如何弄出 CallBack 函数
- 大家说说现在报纸上说的诸如《威讯教育》的IT培训的出入真的那么好么
- 编写记事本程序的问题!
- VB环境问题,将别人写的程序打开,编译时程序里的字符串函数系统不认识,各位大侠帮忙在线急等!!VB环境问题,将别人写的程序打开,编译
- 怎么用vb创建快捷方式
- BMP文件怎么保存?
- 请问在listview中如何实现checkbox供用户选择,在线等候答对马上给分
- JAVA中同微软的WPF WCF WF 三个概念相当是哪几个概念
- ★有个问题请教诸位--VB的EXE文件如何返回一个值?
- 关于winsock不能大量传送的问题。(比较难,请各位大虾不要在乎分数,请教)
- 请问哪里有crystal report 8下载,急用,谢谢!
- VB版的都不会,看看VC版的,别以为问题太小!
打开master库要有sa权限,执行恢复语句