我要达到的目的,是能控制纸张大小,能达到即走即停(3联纸,打印送货单),这段代码在98系统运行正常,。但到了2000下,不起作用。请高手指点。
Dim printerhandle As Long
Dim printername As String
Dim pd As PRINTER_DEFAULTS
Dim MyDevMode As DEVMODE
Dim p As Printer
Dim result As Long
Dim needed As Long
Dim pFullDevMode As Long
Dim pi2_buffer() As Long 'This is a block of memory for the Printer_Info_2 ‘ -structure
printername = Printer.DeviceName
If printername = "" Then
Exit Sub
End If
pd.pDatatype = vbNullString
pd.pDevMode = 0&
pd.DesiredAccess = PRINTER_ALL_ACCESS
result = OpenPrinter(printername, printerhandle, pd)
result = GetPrinter(printerhandle, 2, ByVal 0&, 0, needed)
ReDim pi2_buffer((needed \ 4))
result = GetPrinter(printerhandle, 2, pi2_buffer(0), needed, needed)
pFullDevMode = pi2_buffer(7)
Call CopyMemory(MyDevMode, ByVal pFullDevMode, Len(MyDevMode))
MyDevMode.dmFields = DM_ORIENTATION Or DM_PAPERSIZE Or DM_PAPERWIDTH Or DM_PAPERLENGTH
MyDevMode.dmOrientation = 1
MyDevMode.dmPaperSize = typesize
MyDevMode.dmPaperLength = 950
MyDevMode.dmPaperWidth = 2100
Call CopyMemory(ByVal pFullDevMode, MyDevMode, Len(MyDevMode))
result = DocumentProperties(frm.hwnd, printerhandle, printername, ByVal pFullDevMode, ByVal pFullDevMode, DM_IN_BUFFER Or DM_OUT_BUFFER)
result = SetPrinter(printerhandle, 2, pi2_buffer(0), 0&)
Call ClosePrinter(printerhandle)
' Dim p As Printer
For Each p In Printers
If p.DeviceName = printername Then
Set Printer = p
Exit For
End If
Next pend sub
Dim printerhandle As Long
Dim printername As String
Dim pd As PRINTER_DEFAULTS
Dim MyDevMode As DEVMODE
Dim p As Printer
Dim result As Long
Dim needed As Long
Dim pFullDevMode As Long
Dim pi2_buffer() As Long 'This is a block of memory for the Printer_Info_2 ‘ -structure
printername = Printer.DeviceName
If printername = "" Then
Exit Sub
End If
pd.pDatatype = vbNullString
pd.pDevMode = 0&
pd.DesiredAccess = PRINTER_ALL_ACCESS
result = OpenPrinter(printername, printerhandle, pd)
result = GetPrinter(printerhandle, 2, ByVal 0&, 0, needed)
ReDim pi2_buffer((needed \ 4))
result = GetPrinter(printerhandle, 2, pi2_buffer(0), needed, needed)
pFullDevMode = pi2_buffer(7)
Call CopyMemory(MyDevMode, ByVal pFullDevMode, Len(MyDevMode))
MyDevMode.dmFields = DM_ORIENTATION Or DM_PAPERSIZE Or DM_PAPERWIDTH Or DM_PAPERLENGTH
MyDevMode.dmOrientation = 1
MyDevMode.dmPaperSize = typesize
MyDevMode.dmPaperLength = 950
MyDevMode.dmPaperWidth = 2100
Call CopyMemory(ByVal pFullDevMode, MyDevMode, Len(MyDevMode))
result = DocumentProperties(frm.hwnd, printerhandle, printername, ByVal pFullDevMode, ByVal pFullDevMode, DM_IN_BUFFER Or DM_OUT_BUFFER)
result = SetPrinter(printerhandle, 2, pi2_buffer(0), 0&)
Call ClosePrinter(printerhandle)
' Dim p As Printer
For Each p In Printers
If p.DeviceName = printername Then
Set Printer = p
Exit For
End If
Next pend sub
请问DEVMODE是什么东西?