以下是我使用的示例代码:
System.Management.ManagementScope objMS =
new System.Management.ManagementScope(ManagementPath.DefaultPath);
objMS.Connect();
SelectQuery objQuery = new SelectQuery("SELECT * FROM Win32_Printer");
ManagementObjectSearcher objMOS = new ManagementObjectSearcher(objMS, objQuery);
System.Management.ManagementObjectCollection objMOC = objMOS.Get();
foreach (ManagementObject Printers in objMOC)
{
if (Convert.ToBoolean(Printers["Local"])) // LOCAL PRINTERS.
{
cmbLocalPrinters.Items.Add(new ListItem(Printers["Name"].ToString()));
}
if (Convert.ToBoolean(Printers["Network"])) // ALL NETWORK PRINTERS.
{
cmbNetworkPrinters.Items.Add(new ListItem(Printers["Name"].ToString()));
}
}
当我通过Visual Studio IDE运行我的应用程序时,我可以使用我的代码查看所有打印机(包括网络打印机)。但是当我在本地计算机上发布此应用程序(使用Build - > Publish Websites)时(同样)我正在开发我的应用程序),我只得到我的电脑上安装的本地打印机(没有网络打印机)
答案 0 :(得分:0)
如果你需要避免“身份冒充”,你仍然可以用这个漂亮的技巧来做。您必须将服务器上的打印机添加为本地打印机,并将端口指向打印机的IP地址(或域)。
在Windows Server 2003上:
就是这样!
然后像往常一样运行你的代码,Bham!您可以使用网络打印机了!
System.Management.ObjectQuery oquery = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");
System.Management.ManagementObjectSearcher mosearcher = new System.Management.ManagementObjectSearcher(oquery);
System.Management.ManagementObjectCollection moc = mosearcher.Get();
foreach (ManagementObject mo in moc)
{
System.Management.PropertyDataCollection pdc = mo.Properties;
foreach (System.Management.PropertyData pd in pdc)
{
if ((bool)mo["Network"])
{
cmbNetworkPrinters.Items.Add(mo[pd.Name].ToString());
}
if ((bool)mo["Local"])
{
cmbLocalPrinters.Items.Add(mo[pd.Name].ToString());
}
}
}