我正在.NET 2.0上编写一个winform应用程序,我需要打开弹出窗口,让用户在局域网中选择打印机。这不是PrintDialog。当您点击PrintDialog的“查找打印机...”按钮时,我只需要一个与弹出窗口相同的弹出窗口,标题为“请选择您要使用的网络打印机,然后单击选择以连接到它”。
像this
这样的弹出窗口任何人都可以帮我打开这个弹出窗口,而无需打开PrintDialog弹出窗口吗?
答案 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);
}
}