打开标准“查找网络打印机”对话框

时间:2013-12-26 18:29:39

标签: c# winforms printing .net-2.0

我正在.NET 2.0上编写一个winform应用程序,我需要打开弹出窗口,让用户在局域网中选择打印机。这不是PrintDialog。当您点击PrintDialog的“查找打印机...”按钮时,我只需要一个与弹出窗口相同的弹出窗口,标题为“请选择您要使用的网络打印机,然后单击选择以连接到它”。

this

这样的弹出窗口

任何人都可以帮我打开这个弹出窗口,而无需打开PrintDialog弹出窗口吗?

1 个答案:

答案 0 :(得分:1)

我不知道如何隔离打印对话框的那一部分。

您可能需要使用WMI,并编写一个函数来完成您想要的任务。我最近不得不写类似的东西。

此功能将填充指定计算机上的所有打印机,并将它们列在组合框中。为了我的目的,我已将其设置为列出打印机\\servername\\printername的位置,但您可以根据需要随意编辑它。

我希望这会有所帮助。

private void getPrinters(string domain, string username, string password, string server, ComboBox cmbBox)
    {
        progressBar.Maximum = 3;
        progressBar.Step = 1;
        ConnectionOptions objConnection = new ConnectionOptions();
        objConnection.Username = username;
        objConnection.Authority = "ntlmdomain:" + domain;
        objConnection.Password = password;
        ManagementScope scope = new ManagementScope(@"\\" + server + @"\root\cimv2", objConnection);
        try
        {
            scope.Connect();
        }
        catch (System.Runtime.InteropServices.COMException)
        {
            MessageBoxButtons msgButton = MessageBoxButtons.OK;
            MessageBoxIcon msgIcon = MessageBoxIcon.Error;
            string msgText = "Cannot connect to " + serverPrint + ".";
            string msgTitle = "Connection Error";
            DialogResult result = MessageBox.Show(msgText, msgTitle, msgButton, msgIcon);
            return;
        }
        catch (System.UnauthorizedAccessException)
        {
            MessageBoxButtons msgButton = MessageBoxButtons.OK;
            MessageBoxIcon msgIcon = MessageBoxIcon.Error;
            string msgText = "Bad Username or Password.";
            string msgTitle = "Authentication Error";
            DialogResult result = MessageBox.Show(msgText, msgTitle, msgButton, msgIcon);
            return;
        }
        SelectQuery selectQuery = new SelectQuery();
        selectQuery.QueryString = "Select * from win32_Printer";
        ManagementObjectSearcher MOS = new ManagementObjectSearcher(scope, selectQuery);
        ManagementObjectCollection MOC = MOS.Get();
        cmbBox.Items.Clear();
        foreach (ManagementObject mo in MOC)
        {
            string itemName = @"\\" + serverPrint + @"\" + mo["Name"].ToString();
            cmbBox.Items.Add(itemName);
        }
    }