如何在VB中用代码修改系统(W2000/XP)打印机默认设置?

解决方案 »

  1.   

    http://support.microsoft.com/default.aspx?scid=kb;EN-US;282474看看这个KB
      

  2.   

    一、PrinterProperties VB声明 
    Declare Function PrinterProperties Lib "winspool.drv" Alias "PrinterProperties" (ByVal hwnd As Long, ByVal hPrinter As Long) As Long 
    说明 
    启动打印机属性对话框,以便对打印机进行配置 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hwnd Long,对话框的父窗口 
    hPrinter Long,一个已打开的打印机的句柄 
    注解 
    如打印机打开的时候没有使用足够的访问权限,对话框的有些功能也许会禁止使用
    二、ResetDC VB声明 
    Declare Function ResetDC Lib "gdi32" Alias "ResetDCA" (ByVal hdc As Long, lpInitData As DEVMODE) As Long 
    说明 
    根据提供的DEVMODE结构,对一个设备场景进行重设。这样便允许我们在打印期间改变打印机的配置。利用这个函数,可将文档中的某个页改为横向打印。可试着用DocumentProperties函数取得一个设备的默认DEVMODE结构 
    返回值 
    Long,执行成功则返回设备场景的句柄,零表示失败 
    参数表 
    参数 类型及说明 
    hdc Long,设备场景的句柄 
    lpInitData DEVMODE,指定一个缓冲区的第一个字节。该缓冲区包含了用于那个设备的一个有效DEVMODE结构。记住在这个缓冲区中包括设备专用的数据区 
    注解 
    这个函数可成功用于由VB的Printer对象的hDC属性返回的设备场景上
    注意一定要正确设置lpdm的dmFields字段
    这个函数在StartPage 和 EndPage之间会被禁用——即只能在页与页之间调用这个函数,不能在页内调用
    驱动程序、设备和输出端口不可以用这个函数更改
     
    三、ResetPrinter VB声明 
    Declare Function ResetPrinter Lib "winspool.drv" Alias "ResetPrinterA" (ByVal hPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long 
    说明 
    改变指定打印机的默认数据类型及文档设置 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hPrinter Long,欲修改的一台打印机的句柄 
    pDefault PRINTER_DEFAULTS,定义了打印机新设置的一个结构。参考OpenPrinter函数的说明,了解这个结构进一步的细节。结构中的DesiredAccess字段会被忽略 
    适用平台 
    Windows NT
      

  3.   

    Private Declare Function OpenPrinter Lib "winspool.drv" Alias _
        "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As _
        Long, pDefault As Any) As Long
    Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hwnd As Long, ByVal hPrinter As Long) As LongPrivate Type PRINTER_DEFAULTS
        pDataType As String
        pDevMode As Long
        DesiredAccess As Long
    End TypePrivate Const PRINTER_ACCESS_ADMINISTER = &H4
    Private Const PRINTER_ACCESS_USE = &H8
    Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Private Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _
        PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)Dim DefaultPrt As PrinterPrivate Sub cmdPrinterSet_Click()
        Dim sPrnName As String
        Dim hPrinter As Long
        Dim pd As PRINTER_DEFAULTS    sPrnName = Printer.DeviceName
        
        If OpenPrinter(sPrnName, hPrinter, pd) Then
            Call PrinterProperties(Me.hwnd, hPrinter)
        Else
            MsgBox "打印机属性调用错误。   ", vbOKOnly + vbInformation, ""
        End If
    End Sub
    Private Declare Function DocumentProperties Lib "winspool.drv" Alias "DocumentPropertiesA" (ByVal hwnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, pDevModeOutput As DEVMODE, pDevModeInput As DEVMODE, ByVal fMode As Long) As Longhwnd :  Long,对话框父窗口的句柄。这通常是当前的活动窗体
    hPrinter : Long,一个已打开的打印机对象的句柄
    pDeviceName : String,打印机的名字
    pDevModeOutput :  Long,指向一个DEVMODE数据结构的指针
    pDevModeInput :  Long,指向一个DEVMODE数据结构的指针。
    fMode :  Long,决定这个函数运作模式的一个标志
      

  4.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_7mgj.asp
    http://support.microsoft.com/default.aspx?id=236777