3

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

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

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 类文档

谢谢,

4

2 回答 2

2

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

于 2012-03-19T06:14:05.060 回答
0

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

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

但是,它总是将 TECHNOLOGY 项返回为Raster display。我不知道为什么它总是这样返回值。

[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 函数

示例项目

于 2012-03-27T03:56:39.073 回答