我要达到的目的,是能控制纸张大小,能达到即走即停(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