我需要获取默认打印机名称。我将使用C#,但我怀疑这更多是一个框架问题,并不是特定于语言的。
发布于 2008-09-17 18:54:22
另一种方法是使用WMI (您需要添加对System.Management程序集的引用):
public static string GetDefaultPrinterName()
{
var query = new ObjectQuery("SELECT * FROM Win32_Printer");
var searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
if (((bool?) mo["Default"]) ?? false)
{
return mo["Name"] as string;
}
}
return null;
}
发布于 2008-09-17 20:34:31
如果你只是想要打印机的名字,那就没有任何好处了。但WMI能够返回一大堆其他打印机属性:
using System;
using System.Management;
namespace Test
{
class Program
{
static void Main(string[] args)
{
ObjectQuery query = new ObjectQuery(
"Select * From Win32_Printer " +
"Where Default = True");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
Console.WriteLine(mo["Name"] + "\n");
foreach (PropertyData p in mo.Properties)
{
Console.WriteLine(p.Name );
}
}
}
}
}
而不仅仅是打印机。如果您对任何类型的计算机相关数据感兴趣,则可以使用WMI获取这些数据。WQL (SQL的WMI版本)也是它的优势之一。
发布于 2012-03-07 00:35:11
在本例中,我始终使用System.Printing.LocalPrintServer,它还可以获取打印机是本地打印机、网络打印机还是传真打印机。
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
或者使用静态方法GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
https://stackoverflow.com/questions/86138
复制相似问题