Как определить тип выбранного принтера с точечной матрицей или нет?

Обычно в старой версии Windows (98 или более ранней) я могу использовать MarkingTechnology в Printer api для получения текущего типа принтера. Но это не доступно в Windows 2000 или позже. Есть ли у вас другой способ обнаружить его в Windows 2000 или более поздней версии?

Пример кода для запроса информации о принтере через WMI Query в C#

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

Спасибо,

2 ответа

Решение

Краткий ответ: нет, похоже, нет последовательного способа сделать это.

Я делаю все возможное, чтобы выяснить возможный способ обнаружения принтера Dot Matrix. Я пытаюсь вызвать функцию 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

Пример проекта

Другие вопросы по тегам