如何检测所选打印机的类型是否为点阵

本文关键字:类型 是否 打印机 何检测 检测 | 更新日期: 2023-09-27 18:28:09

通常,在旧版本的Windows(98或更旧版本)中,我可以在PrinterAPI中使用MarkingTechnology来获取当前类型的打印机。但它在Windows 2000或更高版本中不可用。你有其他方法在Windows 2000或更高版本中检测它吗?

通过C#中的WMI查询查询打印机信息的示例代码

var queryResult = string.Empty;
var query = new WqlObjectQuery("Select * from Win32_Printer");
var searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject printer in searcher.Get())
{
    foreach (var p in printer.Properties)
    {
        queryResult += p.Name + ": " + printer[p.Name] + Environment.NewLine;
    }
    queryResult += "--------------------------------" + Environment.NewLine;
}

Win32_Printer类文档

谢谢,

如何检测所选打印机的类型是否为点阵

简短回答:不,似乎没有一致的方法来做到这一点。

我尽我所能找出检测点阵打印机的可能方法。我尝试调用GetDeviceCaps函数(检索指定设备的设备特定信息。)以获取TECHNOLOGY项目,如果选择的打印机是点阵打印机,则该项目应返回为字符流

var hdc = CreateDC("WINSPOOL", printerName, null, IntPtr.Zero);
var technology = (DeviceCapTechnology)GetDeviceCaps(hdc, (int)DeviceCap.TECHNOLOGY);

但是,它总是以光栅显示的形式返回TECHNOLOGY项目。我不知道为什么它总是这样返回值。

[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
[DllImport("gdi32.dll")]
static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData);

GetDeviceCaps函数

示例项目