win7默认打印机未选择打印机

时间:2013-09-01 11:29:15

标签: .net printing

我必须从我的程序中打印一些html文档。因此我不能使用.NET提供的接口(如PrintDocument),但我会采取一些解决方法 为此,我使用WebBrowser控件分开表单,在打印前显示文档,几个基本控件用于确定打印参数,例如选择打印机打印该文档。

部分代码:
将打印机填充到组合框:

For Each pkInstalledPrinter As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters
     cboInstalledprinters.Items.Add(pkInstalledPrinter)
Next pkInstalledPrinter

''p_printer is determined by program but should be changable
''if p_printer is empty then it should be system''s default printer

If p_printer = "" Then
    p_printer = getDefaultPrinter()
End If
cboInstalledprinters.SelectedItem = p_printer

要更改所需的打印机,用户可以像这样使用组合框cboInstalledprinters

Private Sub cboInstalledprinters_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboInstalledprinters.SelectedIndexChanged
    p_printer = cboInstalledprinters.SelectedItem.ToString
    SetDefaultPrinter(p_printer)
End Sub

打印webBrowser内容如下:

 Dim MyWeb As Object = WebBrowser1.ActiveXInstance
 Try
     MyWeb.ExecWB(olecmdid.OLECMDID_PRINT, PromptUser, IntPtr.Zero, IntPtr.Zero)
 Catch ex As Exception
     MsgBox(ex.Message)
 End Try
 MyWeb = Nothing

PromptUser属于execopt类型,可以在调用打印时从函数外部确定。

使用过的功能:
getDefaultPrinter

Public Function getDefaultPrinter() As String
Dim oldPrinter As String
    Dim oPS As New System.Drawing.Printing.PrinterSettings
    Try
        oldPrinter = oPS.PrinterName
    Catch ex As System.Exception
        oldPrinter = ""
    End Try
    Return oldPrinter
End Function

setDefaultPrinter

<DllImport("winspool.drv", EntryPoint:="SetDefaultPrinter", _
 SetLastError:=True, CharSet:=CharSet.Auto, ExactSpelling:=False, CallingConvention:=CallingConvention.StdCall)> _
 Public Function setDefaultPrinter(ByVal strPrinterName As String) As Boolean
End Function

所有这些都很有效 但问题是什么?

当我从组合框切换(选择)不同的打印机时,我可以看到控制面板/设备和打印机中默认打印机的更改是什么意味着默认打印机切换良好(绿色选中标记根据从组合框中选择的方式移动)。

我认为该程序会自动使用默认打印机进行打印,但是当我按下打印按钮来调用打印时,我的程序不会打印到默认打印机。而不是使用SELECTED。当我用execopt.OLECMDEXECOPT_PROMPTUSER调用打印功能时,我得到了一个打印机的附加对话框,我可以看到哪个打印机是默认的,但是该打印机未被选中。

实际上,我对combobox默认打印机更改的更改,但SELECTED PRINTER根本没有更改(从第一次使用时仍然记得),程序想要通过选定的打印机打印,而不是默认打印机。这种行为可能是好的,但问题是我无法用程序设置该选择。我可以使用代码更改默认打印机,但只能通过退出程序并返回来选择打印机。

如何选择带有组合框cboInstalledprinters的打印机,以便程序自动使用选定的打印机?

0 个答案:

没有答案