Как определить тип выбранного принтера с точечной матрицей или нет?
Обычно в старой версии 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);