2009-10-07 3 views

ответ

0

Вы должны иметь возможность собирать эту информацию через WMI. Win32_Printer.DefaultLanguage должен возвращать это значение. Если я вспоминаю об этом в прошлом, многие драйверы принтера не возвращают значение.

Проверить здесь: http://msdn.microsoft.com/en-us/library/aa394363%28VS.85%29.aspx

Somthing как это «должен» сделать трюк:

System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer"); 
ManagementObjectSearcher mos = new ManagementObjectSearcher(oq); 
ManagementObjectCollection moc = mos.Get(); 
foreach(ManagementObject mo in moc) 
{ 

    string name = mo["Name"].ToString(); 
    string language = mo["DefaultLanguage"].ToString(); 
    MessageBox.Show(String.Format("Printer: {0} -- Language: {1}", name, language); 
} 

Это возвращает UInt16, проверьте ссылку на перевод «Язык по умолчанию» на английском языке то есть: PCL, Postscript, HPGL и т. д.

Могу ли я спросить, почему вы пытаетесь определить перед собой, какой будет выход? Если это процесс печати в файл, я просто смотрю на результат и определяю, что это такое. Большинство новых драйверов печати вставит заявление PJL в верхней части этой работы, как этот

@PJL ENTER LANUGAGE = «PCL»

Или просто посмотреть на сам код для заперта таких показателей, как для PCL или% PS для Postscript и т. Д.

1

Если ваша целевая ОС - Windows, еще один способ - сделать некоторую логику для драйвера и очереди печати. Вы можете использовать API WMI/.NET для получения имени DLL драйвера. Если это unidrv.dll, то драйвер является драйвером PCL, и если это pscript.dll, то это драйвер PS. Конечно, это для драйверов, основанных на базе драйверов MS Unidrv/PScript, но вы обнаружите, что большая часть ваших установленных драйверов основана на этой структуре.