谁说不能,你看看下面代码(一):' orientation selections Public Const DMORIENT_PORTRAIT As Integer = 1 Public Const DMORIENT_LANDSCAPE As Integer = 2' paper selections Public Const DMPAPER_LETTER As Integer = 1 Public Const DMPAPER_FIRST As Integer = DMPAPER_LETTER ' Letter 8 1/2 x 11 in Public Const DMPAPER_LETTERSMALL As Integer = 2 ' Letter Small 8 1/2 x 11 in Public Const DMPAPER_TABLOID As Integer = 3 ' Tabloid 11 x 17 in Public Const DMPAPER_LEDGER As Integer = 4 ' Ledger 17 x 11 in Public Const DMPAPER_LEGAL As Integer = 5 ' Legal 8 1/2 x 14 in Public Const DMPAPER_STATEMENT As Integer = 6 ' Statement 5 1/2 x 8 1/2 in Public Const DMPAPER_EXECUTIVE As Integer = 7 ' Executive 7 1/4 x 10 1/2 in Public Const DMPAPER_A3 As Integer = 8 ' A3 297 x 420 mm Public Const DMPAPER_A4 As Integer = 9 ' A4 210 x 297 mm Public Const DMPAPER_A4SMALL As Integer = 10 ' A4 Small 210 x 297 mm Public Const DMPAPER_A5 As Integer = 11 ' A5 148 x 210 mm Public Const DMPAPER_B4 As Integer = 12 ' B4 250 x 354 Public Const DMPAPER_B5 As Integer = 13 ' B5 182 x 257 mm Public Const DMPAPER_FOLIO As Integer = 14 ' Folio 8 1/2 x 13 in Public Const DMPAPER_QUARTO As Integer = 15 ' Quarto 215 x 275 mm Public Const DMPAPER_10X14 As Integer = 16 ' 10x14 in Public Const DMPAPER_11X17 As Integer = 17 ' 11x17 in Public Const DMPAPER_NOTE As Integer = 18 ' Note 8 1/2 x 11 in Public Const DMPAPER_ENV_9 As Integer = 19 ' Envelope #9 3 7/8 x 8 7/8 Public Const DMPAPER_ENV_10 As Integer = 20 ' Envelope #10 4 1/8 x 9 1/2 Public Const DMPAPER_ENV_11 As Integer = 21 ' Envelope #11 4 1/2 x 10 3/8 Public Const DMPAPER_ENV_12 As Integer = 22 ' Envelope #12 4 \276 x 11 Public Const DMPAPER_ENV_14 As Integer = 23 ' Envelope #14 5 x 11 1/2 Public Const DMPAPER_CSHEET As Integer = 24 ' C size sheet Public Const DMPAPER_DSHEET As Integer = 25 ' D size sheet Public Const DMPAPER_ESHEET As Integer = 26 ' E size sheet Public Const DMPAPER_ENV_DL As Integer = 27 ' Envelope DL 110 x 220mm Public Const DMPAPER_ENV_C5 As Integer = 28 ' Envelope C5 162 x 229 mm Public Const DMPAPER_ENV_C3 As Integer = 29 ' Envelope C3 324 x 458 mm Public Const DMPAPER_ENV_C4 As Integer = 30 ' Envelope C4 229 x 324 mm Public Const DMPAPER_ENV_C6 As Integer = 31 ' Envelope C6 114 x 162 mm Public Const DMPAPER_ENV_C65 As Integer = 32 ' Envelope C65 114 x 229 mm Public Const DMPAPER_ENV_B4 As Integer = 33 ' Envelope B4 250 x 353 mm Public Const DMPAPER_ENV_B5 As Integer = 34 ' Envelope B5 176 x 250 mm Public Const DMPAPER_ENV_B6 As Integer = 35 ' Envelope B6 176 x 125 mm Public Const DMPAPER_ENV_ITALY As Integer = 36 ' Envelope 110 x 230 mm Public Const DMPAPER_ENV_MONARCH As Integer = 37 ' Envelope Monarch 3.875 x 7.5 in Public Const DMPAPER_ENV_PERSONAL As Integer = 38 ' 6 3/4 Envelope 3 5/8 x 6 1/2 in Public Const DMPAPER_FANFOLD_US As Integer = 39 ' US Std Fanfold 14 7/8 x 11 in Public Const DMPAPER_FANFOLD_STD_GERMAN As Integer = 40 ' German Std Fanfold 8 1/2 x 12 in Public Const DMPAPER_FANFOLD_LGL_GERMAN As Integer = 41 ' German Legal Fanfold 8 1/2 x 13 in Public Const DMPAPER_LAST As Integer = DMPAPER_FANFOLD_LGL_GERMAN Public Const DMPAPER_USER As Integer = 256Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Byte, 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 Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Function GetLastError Lib "kernel32" () As LongPrivate Const PRINTER_ALL_ACCESS As Long = &HF000C Private Const PRINTER_READ As Long = &H20008Private 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 TypePrivate Type PRINTER_DEFAULTS pDatatype As Long pDevMode As Long DesiredAccess As Long End 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 Long End Type
(二): Public Function GetPrinterInfo(PrinterName As String, Orientation As Integer, PaperSize As Integer) As Boolean Dim hPrinter As Long Dim pi2 As PRINTER_INFO_2 Dim pd As PRINTER_DEFAULTS Dim dm As DEVMODE Dim BufSize As Long Dim Buffer() As Byte
GetPrinterInfo = True End FunctionPublic Function SetPrinterInfo(PrinterName As String, Orientation As Integer, PaperSize As Integer) As Boolean Dim hPrinter As Long Dim pi2 As PRINTER_INFO_2 Dim pd As PRINTER_DEFAULTS Dim dm As DEVMODE Dim BufSize As Long Dim Buffer() As Byte
Public Const DMORIENT_PORTRAIT As Integer = 1
Public Const DMORIENT_LANDSCAPE As Integer = 2' paper selections
Public Const DMPAPER_LETTER As Integer = 1
Public Const DMPAPER_FIRST As Integer = DMPAPER_LETTER ' Letter 8 1/2 x 11 in
Public Const DMPAPER_LETTERSMALL As Integer = 2 ' Letter Small 8 1/2 x 11 in
Public Const DMPAPER_TABLOID As Integer = 3 ' Tabloid 11 x 17 in
Public Const DMPAPER_LEDGER As Integer = 4 ' Ledger 17 x 11 in
Public Const DMPAPER_LEGAL As Integer = 5 ' Legal 8 1/2 x 14 in
Public Const DMPAPER_STATEMENT As Integer = 6 ' Statement 5 1/2 x 8 1/2 in
Public Const DMPAPER_EXECUTIVE As Integer = 7 ' Executive 7 1/4 x 10 1/2 in
Public Const DMPAPER_A3 As Integer = 8 ' A3 297 x 420 mm
Public Const DMPAPER_A4 As Integer = 9 ' A4 210 x 297 mm
Public Const DMPAPER_A4SMALL As Integer = 10 ' A4 Small 210 x 297 mm
Public Const DMPAPER_A5 As Integer = 11 ' A5 148 x 210 mm
Public Const DMPAPER_B4 As Integer = 12 ' B4 250 x 354
Public Const DMPAPER_B5 As Integer = 13 ' B5 182 x 257 mm
Public Const DMPAPER_FOLIO As Integer = 14 ' Folio 8 1/2 x 13 in
Public Const DMPAPER_QUARTO As Integer = 15 ' Quarto 215 x 275 mm
Public Const DMPAPER_10X14 As Integer = 16 ' 10x14 in
Public Const DMPAPER_11X17 As Integer = 17 ' 11x17 in
Public Const DMPAPER_NOTE As Integer = 18 ' Note 8 1/2 x 11 in
Public Const DMPAPER_ENV_9 As Integer = 19 ' Envelope #9 3 7/8 x 8 7/8
Public Const DMPAPER_ENV_10 As Integer = 20 ' Envelope #10 4 1/8 x 9 1/2
Public Const DMPAPER_ENV_11 As Integer = 21 ' Envelope #11 4 1/2 x 10 3/8
Public Const DMPAPER_ENV_12 As Integer = 22 ' Envelope #12 4 \276 x 11
Public Const DMPAPER_ENV_14 As Integer = 23 ' Envelope #14 5 x 11 1/2
Public Const DMPAPER_CSHEET As Integer = 24 ' C size sheet
Public Const DMPAPER_DSHEET As Integer = 25 ' D size sheet
Public Const DMPAPER_ESHEET As Integer = 26 ' E size sheet
Public Const DMPAPER_ENV_DL As Integer = 27 ' Envelope DL 110 x 220mm
Public Const DMPAPER_ENV_C5 As Integer = 28 ' Envelope C5 162 x 229 mm
Public Const DMPAPER_ENV_C3 As Integer = 29 ' Envelope C3 324 x 458 mm
Public Const DMPAPER_ENV_C4 As Integer = 30 ' Envelope C4 229 x 324 mm
Public Const DMPAPER_ENV_C6 As Integer = 31 ' Envelope C6 114 x 162 mm
Public Const DMPAPER_ENV_C65 As Integer = 32 ' Envelope C65 114 x 229 mm
Public Const DMPAPER_ENV_B4 As Integer = 33 ' Envelope B4 250 x 353 mm
Public Const DMPAPER_ENV_B5 As Integer = 34 ' Envelope B5 176 x 250 mm
Public Const DMPAPER_ENV_B6 As Integer = 35 ' Envelope B6 176 x 125 mm
Public Const DMPAPER_ENV_ITALY As Integer = 36 ' Envelope 110 x 230 mm
Public Const DMPAPER_ENV_MONARCH As Integer = 37 ' Envelope Monarch 3.875 x 7.5 in
Public Const DMPAPER_ENV_PERSONAL As Integer = 38 ' 6 3/4 Envelope 3 5/8 x 6 1/2 in
Public Const DMPAPER_FANFOLD_US As Integer = 39 ' US Std Fanfold 14 7/8 x 11 in
Public Const DMPAPER_FANFOLD_STD_GERMAN As Integer = 40 ' German Std Fanfold 8 1/2 x 12 in
Public Const DMPAPER_FANFOLD_LGL_GERMAN As Integer = 41 ' German Legal Fanfold 8 1/2 x 13 in
Public Const DMPAPER_LAST As Integer = DMPAPER_FANFOLD_LGL_GERMAN
Public Const DMPAPER_USER As Integer = 256Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Byte, 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
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetLastError Lib "kernel32" () As LongPrivate Const PRINTER_ALL_ACCESS As Long = &HF000C
Private Const PRINTER_READ As Long = &H20008Private 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 TypePrivate Type PRINTER_DEFAULTS
pDatatype As Long
pDevMode As Long
DesiredAccess As Long
End 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 Long
End Type
Public Function GetPrinterInfo(PrinterName As String, Orientation As Integer, PaperSize As Integer) As Boolean
Dim hPrinter As Long
Dim pi2 As PRINTER_INFO_2
Dim pd As PRINTER_DEFAULTS
Dim dm As DEVMODE
Dim BufSize As Long
Dim Buffer() As Byte
pd.pDatatype = 0
pd.pDevMode = 0
pd.DesiredAccess = PRINTER_READ
If OpenPrinter(PrinterName, hPrinter, pd) = 0 Then Exit Function
GetPrinter hPrinter, 2, 0, 0, BufSize
ReDim Buffer(BufSize) As Byte
If GetPrinter(hPrinter, 2, Buffer(0), BufSize, BufSize) = 0 Then Exit Function
CopyMemory pi2, Buffer(0), Len(pi2)
CopyMemory dm, ByVal pi2.pDevMode, Len(dm)
Orientation = dm.dmOrientation
PaperSize = dm.dmPaperSize
ClosePrinter hPrinter
GetPrinterInfo = True
End FunctionPublic Function SetPrinterInfo(PrinterName As String, Orientation As Integer, PaperSize As Integer) As Boolean
Dim hPrinter As Long
Dim pi2 As PRINTER_INFO_2
Dim pd As PRINTER_DEFAULTS
Dim dm As DEVMODE
Dim BufSize As Long
Dim Buffer() As Byte
pd.pDatatype = 0
pd.pDevMode = 0
pd.DesiredAccess = PRINTER_ALL_ACCESS
If OpenPrinter(PrinterName, hPrinter, pd) = 0 Then Exit Function
GetPrinter hPrinter, 2, 0, 0, BufSize
ReDim Buffer(BufSize) As Byte
If GetPrinter(hPrinter, 2, Buffer(0), BufSize, BufSize) = 0 Then Exit Function
CopyMemory pi2, Buffer(0), Len(pi2)
CopyMemory dm, ByVal pi2.pDevMode, Len(dm)
dm.dmOrientation = Orientation
dm.dmPaperSize = PaperSize
CopyMemory ByVal pi2.pDevMode, dm, Len(dm)
If Not SetPrinter(hPrinter, 2, pi2, 0) Then Exit Function
ClosePrinter hPrinter
SetPrinterInfo = True
End Function这两个函数可以获取和修改制定打印机的默认信息,也可以自定义,你试试。
打印纸的长度单位是什莫? 用代码设置打印纸长 12 cm,宽 8 cm,怎样实现?
参数 PrinterName 怎样填写?