Проверьте, поддерживает ли принтер PostScript

Есть ли способ проверить, поддерживает ли принтер PostScript, используя С#? Мне нужно проверить это, прежде чем делать что-либо с моим документом.

Спасибо, Бартош.


person Hawex    schedule 28.02.2018    source источник


Ответы (2)


Вы можете потенциально использовать WMI, однако я не уверен, что это решение будет надежным.

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));
}

Взято отсюда

Обновить

Проверьте здесь, чтобы увидеть другие поля, которые могут иметь отношение

класс Win32_Printer

В частности uint16 LanguagesSupported[];

person TheGeneral    schedule 28.02.2018
comment
Спасибо за помощь, я уже нашел это решение, но оно у меня не работает - я получаю NullReferenceException на mo[DefaultLanguage].ToString(); - person Hawex; 28.02.2018
comment
Обратите внимание, что установленный драйвер принтера может повлиять на поддержку PostScript. - person Bernard Vander Beken; 28.02.2018

Код, который я наконец использовал, с небольшими изменениями:

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();
            var language = mo["LanguagesSupported"];
            Console.WriteLine(String.Format("Printer: {0} -- Language: {1}", name, language==null ? 0 : (language as ushort[])[0]));
        }
person Hawex    schedule 28.02.2018