xmldmeng 2017-06-19 06:24 采纳率: 42.9%
浏览 1297

更打印机默认纸张的问题?

我想更改非默认打印机的纸张设置,下面代码有两处通不过,谁能帮我看看是什么问题,我的系统是Win7 64位。
Public Function SetPaperSize1(ByVal strPrinterName As String) As Boolean
Dim hPrinter As IntPtr
Dim pi2 As IntPtr
Dim DevMode As New DEVMODE
Dim pDefault As PRINTER_DEFAULTS
Dim InfoPrinter2 As New PRINTER_INFO_2
pDefault.DesiredAccess = PRINTER_ALL_ACCESS '这里不为0打不开打印机
If OpenPrinter(strPrinterName, hPrinter, pDefault) Then
Dim byteNeeded As Integer
Dim returnValue = GetPrinter(hPrinter, 2, IntPtr.Zero, 0, byteNeeded)
If returnValue < 0 Then
Throw New ApplicationException(Marshal.GetLastWin32Error)
End If
pi2 = Marshal.AllocHGlobal(byteNeeded)
returnValue = GetPrinter(hPrinter, 2, pi2, byteNeeded, byteNeeded)
If returnValue = False Then
Throw New ApplicationException(Marshal.GetLastWin32Error)
End If
InfoPrinter2 = DirectCast(Marshal.PtrToStructure(pi2, GetType(PRINTER_INFO_2)), PRINTER_INFO_2)
DevMode = DirectCast(Marshal.PtrToStructure(InfoPrinter2.pDevMode, GetType(DEVMODE)), DEVMODE)
With DevMode
.dmPaperSize = 9
End With
Marshal.StructureToPtr(DevMode, InfoPrinter2.pDevMode, True)
Dim pi3 As IntPtr = pi2
Marshal.StructureToPtr(InfoPrinter2, pi2, True) '程序这里通不过

        If Not SetPrinter(hPrinter, 2, pi2, 0&) Then
            Throw New ApplicationException(Marshal.GetLastWin32Error)
        End If

        ClosePrinter(hPrinter)
        Marshal.FreeHGlobal(pi2)
        Return True
    Else
        Throw New ApplicationException(Marshal.GetLastWin32Error)
    End If
End Function

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2018-09-05 15:36
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体