Как определить тип выбранного принтера с точечной матрицей или нет? - PullRequest
3 голосов
/ 19 марта 2012

Обычно в старой версии 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 ]

2 голосов
/ 19 марта 2012

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

0 голосов
/ 27 марта 2012

Я прилагаю все усилия, чтобы выяснить возможный способ обнаружения принтера Dot Matrix. Я пытаюсь вызвать функцию GetDeviceCaps (получает информацию об устройстве для указанного устройства), чтобы получить элемент TECHNOLOGY , который должен возвращаться как Поток символов , если выбранный принтер имеет матрицу точек.

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

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

...