簡體   English   中英

如何檢測所選打印機的類型是否為點陣?

[英]How to detect type of selected printer that is dot matrix or not?

通常,在舊版Windows(98或更早版本)中,我可以使用Printer api中的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函數(檢索指定設備的特定於設備的信息。)以獲取應該返回為字符流的 技術項目,如果選擇的打印機是點陣。

var hdc = CreateDC("WINSPOOL", printerName, null, IntPtr.Zero);
var technology = (DeviceCapTechnology)GetDeviceCaps(hdc, (int)DeviceCap.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函數

示例項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM