как я проверяю, установлен ли принтер и готовое использование C#?

Как вопрос я связался , был удален, я помещу часть его сюда:

Вопрос

я сделал издевательский комментарий в другом потоке вопроса, назвав PHP ужасным языком, и это спустилось - проголосовавший как сумасшедший. По-видимому, существует много людей здесь, которые любят PHP.

, Таким образом, мне по-настоящему любопытно. Что я пропускаю? Что делает PHP хорошим языком?

Вот мои причины неприязни его:

  • PHP имеет непоследовательное именование встроенных и библиотечных функций. Предсказуемые шаблоны именования важны в любом дизайне.

  • PHP имеет непоследовательное упорядочивание параметра встроенных функций, например, array_map по сравнению с array_filter, который является раздражающим в простых случаях и повышает все виды неожиданного поведения или хуже.

  • разработчики PHP постоянно удерживают от использования встроенные функции и функциональность низшего уровня. Хороший пример - когда они удержали от использования передачу ссылкой для функций. Это создало кошмар для любого делающего, скажем, функционируют обратные вызовы.

  • отсутствие А соображения в модернизации. Вышеупомянутая депрекация устранила способность к, во многих случаях, обеспечьте значения ключевого слова по умолчанию для функций. Они зафиксировали это в PHP 5, но они удержали от использования передачу ссылкой в PHP 4!

  • Плохое выполнение пространств имен (раньше никакие пространства имен вообще). Теперь, когда пространства имен существуют, что мы используем в качестве разыменовать символа? Обратная косая черта! Символ, используемый универсально для выхода, даже в PHP!

  • Чрезмерно широкое неявное преобразование типов приводит к ошибкам. У меня нет проблемы с неявными преобразованиями, скажем, плавания к целому числу или назад снова. Но PHP (длятся, я проверил), счастливо попытается волшебно преобразовать массив в целое число.

  • Плохая производительность рекурсии. Рекурсия является существенно важным инструментом для записи на любом языке; это может сделать сложные алгоритмы намного более простыми. Плохая поддержка непростительна.

  • Функции нечувствительны к регистру. Я понятия не имею, что они думали на этом. Язык программирования является способом определить поведение и к компьютеру и к средству чтения кода без неоднозначности. Нечувствительность к регистру представляет много неоднозначности.

  • PHP поощряет (практически требует), связь обработки с представлением. Да, можно записать PHP, который не делает так, но на самом деле легче записать код в неправильном (с точки зрения саунд-дизайна) способ.

  • производительность PHP плачевна без кэширования. Кто-либо продает коммерческий продукт кэширования за PHP? О, посмотрите, разработчики PHP делают.

Худший из всех, PHP убеждает людей, что разработка веб-приложений легка. И это действительно прилагает большую часть усилия, включенного намного легче. Но факт, разрабатывая веб-приложение, которое и безопасно и эффективное, очень трудная задача.

, убеждая так многих заняться программированием, PHP преподавала всю подгруппу дурных привычек программистов и плохого дизайна. Это предоставило им доступ к возможностям, которые они испытывают недостаток в понимании для использования безопасно. Это привело к репутации PHP, как являющейся небезопасным.

(Однако я с готовностью признаю, что PHP не более или менее безопасен, чем какой-либо другой язык веб-программирования.)

, Что я пропускаю о PHP? Я вижу органически выращенную, плохо управляемую путаницу языка, это порождает бедных программистов.

Так убеждают меня иначе!

Главный Расчетный Ответ

я попробую отвечать на каждый из Ваших пунктов маркированного списка

, PHP имеет непоследовательное именование встроенных и библиотечных функций. Предсказуемые шаблоны именования важны в любом дизайне.

я и любите и ненавидьте эту тему. Поскольку в ее ядре, эта проблема корректна. Почему некоторое разделение функции bi-слова с подчеркиванием, и некоторые не? Почему игла и параметры стога сена подкачивают положения в подписи аргумента иногда? Это смешно. Но в конце дня... это действительно имеет значение? Мой IDE с intellisense и php.net просто щелчок браузера далеко, это является просто не настолько большим из соглашения. Действительно ли это - отрицание против PHP как язык? Да. Это препятствует моей способности быть эффективным программистом? Нет.

разработчики PHP постоянно удерживают от использования встроенные функции и функциональность низшего уровня. Хороший пример - когда они удержали от использования передачу ссылкой для функций. Это создало кошмар для любого делающего, скажем, функционируют обратные вызовы.

Лично, я думаю, что это не положительная сторона. Депрекация необходима для эволюции языка, особенно тот, который имеет столько же хлама, сколько PHP делает. PHP получает много зенитного огня для "упрощения быть плохим программистом*", но в то же время группа PHP также входит в проблему, когда они пытаются удалить глупые конструкции из языка, такие как передача ссылкой времени вызова. Устранение передачи ссылкой времени вызова было одним из лучших перемещений, которые они когда-либо делали. Не было никакого более легкого способа для разработчика новичка выстрелить себе в ногу, чем с этой "функцией".

отсутствие А соображения в модернизации. Вышеупомянутая депрекация устранила способность к, во многих случаях, обеспечьте значения ключевого слова по умолчанию для функций. Они зафиксировали это в PHP 5, но они удержали от использования передачу ссылкой в PHP 4!

я не думаю, что существует общее отсутствие соображения вообще, я думаю, что Вы просто погорели этим конкретным изменением и были оставлены с кислым вкусом во рту. Изменения языка часто являются известными месяцами если не годы загодя. Руководство по миграции было предоставлено для перемещения от 4 до 5, и различия в версии документируются в руководство. Передача ссылкой времени вызова была ужасной "функцией" и не дает разработчику выразительного питания, которое они не могут получить другими средствами. Я рад, что этого не стало (наряду с другим дерьмом как волшебные кавычки)

Плохое выполнение пространств имен (раньше никакие пространства имен вообще). Теперь, когда пространства имен существуют, что мы используем в качестве разыменовать символа? Обратная косая черта! Символ, используемый универсально для выхода, даже в PHP!

я смешал чувства об этом. Часть меня думает, "кто заботится, символьный выход не имеет никакого значения за пределами строки так или иначе", и часть меня думает, "конечно, что они могли использовать что-то лучше". Но могли они? Я не знаю, я не разработчик для синтаксического анализатора Зенда. Действительно ли это - огромный контроль, что, пока 5.3 PHP никогда не имели пространства имен вообще? Да, абсолютно.

Чрезмерно широкое неявное преобразование типов приводит к ошибкам. У меня нет проблемы с неявными преобразованиями, скажем, плавания к целому числу или назад снова. Но PHP (длятся, я проверил), счастливо попытается волшебно преобразовать массив в целое число.

я думаю, что нормально не соглашаться с тем, как PHP делает это, но не соглашается, что это делает язык "плохо". Но спросите меня, сколько я хочу сидеть в этой теме и обсудить о слабом по сравнению со строгим контролем типов. (P.S. Я не делаю, во всем ) Для записи: PHP выпустит погрешность нивелировки E_WARNING, когда тип аргумента будет иметь значение, и не может решенным приведением.

Плохая производительность рекурсии. Рекурсия является существенно важным инструментом для записи на любом языке; это может сделать сложные алгоритмы намного более простыми. Плохая поддержка непростительна.

PHP является DSL для сети. Я делал его полный рабочий день в течение 8 лет и возможно использовал рекурсию 4 или 5 раз, обычно для некоторого типа раздражающего каталога или обхода XML. Просто не шаблон необходим для веб-разработки настолько часто. Я не извиняю медленную производительность, но это - академическая проблема намного больше, чем это - производственная проблема. При необходимости в действительно мощной рекурсивной производительности PHP уже является неправильным языком для Вас.

Функции нечувствительны к регистру. Я понятия не имею, что они думали на этом. Язык программирования является способом определить поведение и к компьютеру и к средству чтения кода без неоднозначности. Нечувствительность к регистру представляет много неоднозначности.

я полностью 100% соглашаются с этим.

PHP поощряет (практически требует), связь обработки с представлением. Да, можно записать PHP, который не делает так, но на самом деле легче записать код в неправильном (с точки зрения саунд-дизайна) способ.

*Hmmm, эта тема звучит отчаянно знакомой...

, Но серьезно, я нахожу его замечательным, что люди будут жаловаться на язык, который абсолютно 100% позволять Вам реализовывать любую выходную систему, которую Вы хочет (чистый объем и стиль PHP, который шаблонная обработка одних только систем говорила с этим) - ИЛИ - пропускать все эти издержки и просто производить непосредственно. Это делает PHP плохо вообще. Это быть часть того, что делает пользу PHP.

производительность PHP плачевная без кэширования. Кто-либо продает коммерческий продукт кэширования за PHP? О, смотрит, разработчики PHP делает.

Вы имеет в виду кэширование байт-кода (как акселератор), или кэширование вывода?

, Если первый, то я действительно знает, о каком количестве я заботящийся об этой теме. Акселераторы свободные и легкие работать. Мы спорил о том, почему это быть часть языка, но в конце, я думает, что это имеет значение очень.

, Если Вы говорящие о кэшировании вывода тогда, я знает, что говорит Вам. ЛЮБОЙ веб-проект со значительным транспортным кэшированием потребностей (отбирать подкаст № 27, например). Это PHP-конкретным-вопросом во всем .

, Таким образом, я думает, что Вы считает PHP "плохим" языком очень академическим способом. И в Вашем предыдущем сообщении Вы, вероятно, проваливаемые людьми как я, которые использует PHP, чтобы "добивающиеся цели".

Второй Главный Расчетный Ответ

Все Ваши критические замечания (и еще немного) допустимые. Вам разрешил и даже, как ожидаемый, ненавидеть PHP.

, Но, с другой стороны, это обладает некоторыми преимуществами:

  • Повсеместный
  • Быстрый (особенно использование кэшей кода операции)
  • Огромное сообщество (и замечательная документация)
  • Работы

Наконец, Вы преодолевает многих, если бы не все оборотные стороны путем записи хорошего кода Вы пишет на каком-либо другом языке. Вы пишет тело, безопасный и хороший код обоняния в PHP, который много раз работает быстрее и был легче размещать и масштабировался, чем много альтернатив.

Третий Главный Расчетный Ответ

, Что я пропустил о PHP? Я видя органически выращенную, плохо управляемую путаницу языка, это породило бедных программистов.

Простой. То, что бедные программисты существуют очень защитными о своем языке.;) PHP легко, намного легче, чем альтернативы, и как только Вы изучаете его, это точно очевидно 1) что случилось с PHP, 2) как альтернативы являются лучше и 3) как переключается на и - одна из альтернатив.

И возможно то, что, ну, в общем, что имели альтернативы люди? ASP? Это имеет много проблем самостоятельно, от неспособности работало на большинстве веб-серверов (Apache), к некоторым смешным и сверхспроектированным проектным решениям самостоятельно (веб-формы? Состояние отображения? Ajax, где Ваши асинхронные" запросы прервите и работайте последовательно ?) Ruby on Rails? Ну, возможно, кроме того, сколько веб-серверов поддерживало его снова? Это точно легко доступно в данный момент. И это не медленно. Таким образом, возможно, "сила" PHP состояла действительно в том, что никакой хороший альтернатива будет существовать. По крайней мере, это быть то, почему я избегаю всего веб-программирования когда вообще возможный. PHP является, и я слишком увлечен ни одной из альтернатив также.

PHP имеет столько фундаментальных проблем, что это даже не забавно. От отсутствия поддержки unicode, ко многим неявным преобразованиям типов, которые часто приводят к неожиданным дырам в системе безопасности к полному смешиванию представления и... всего остального, или к модулю базы данных по умолчанию, который не делал (в последний раз я являюсь) использование параметризовать запросы. Мы говорим о языке, сделанном для двух вещей, доступа к базе данных, и генерируем HTML, и который быть ужасен в обоих.

Это не просто противная путаница, язык, разработанный людьми, которые не являются или способные, для разработки языка.;)

12
задан RCIX 26 October 2009 в 03:11
поделиться

1 ответ

This snippet will retrieve information about installed printers:

using System.Drawing.Printing;
//...

  foreach (string printerName in PrinterSettings.InstalledPrinters)
  {
    // Display the printer name.
    Console.WriteLine("Printer: {0}", printerName);

    // Retrieve the printer settings.
    PrinterSettings printer = new PrinterSettings();
    printer.PrinterName = printerName;

    // Check that this is a valid printer.
    // (This step might be required if you read the printer name
    // from a user-supplied value or a registry or configuration file
    // setting.)
    if (printer.IsValid)
    {
      // Display the list of valid resolutions.
      Console.WriteLine("Supported Resolutions:");

      foreach (PrinterResolution resolution in
        printer.PrinterResolutions)
      {
        Console.WriteLine("  {0}", resolution);
      }
      Console.WriteLine();

      // Display the list of valid paper sizes.
      Console.WriteLine("Supported Paper Sizes:");

      foreach (PaperSize size in printer.PaperSizes)
      {
        if (Enum.IsDefined(size.Kind.GetType(), size.Kind))
        {
          Console.WriteLine("  {0}", size);
        }
      }
      Console.WriteLine();
    }
  }

The other option is to use WMI. Right Click Project > Add Reference > Select .NET Tab > System.Management

using System.Management;
// ...

   private List<string> GetPrinters()
   {     
        List<string> printerNames = new List<string>();

        // Use the ObjectQuery to get the list of configured printers
        System.Management.ObjectQuery oquery = 
            new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");

        System.Management.ManagementObjectSearcher mosearcher = 
            new System.Management.ManagementObjectSearcher(oquery);

        System.Management.ManagementObjectCollection moc = mosearcher.Get();

        foreach (ManagementObject mo in moc)
        {
            System.Management.PropertyDataCollection pdc = mo.Properties;
            foreach (System.Management.PropertyData pd in pdc)
            {
                if ((bool)mo["Network"])
                {
                    printerNames.Add(mo[pd.Name]);
                }
            }
        }

        return printerNames;

    }

Here's another snippet which shows more properties:

    static void PrintProps(ManagementObject o, string prop)
    {
        try { Console.WriteLine(prop + "|" + o[prop]); }
        catch (Exception e) { Console.Write(e.ToString()); }
    }

    static void Main(string[] args)
    {

        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");

        foreach (ManagementObject printer in searcher.Get())
        {
            string printerName = printer["Name"].ToString().ToLower();
            Console.WriteLine("Printer :" + printerName);

            PrintProps(printer, "Caption");
            PrintProps(printer, "ExtendedPrinterStatus");
            PrintProps(printer, "Availability");
            PrintProps(printer, "Default");
            PrintProps(printer, "DetectedErrorState");
            PrintProps(printer, "ExtendedDetectedErrorState");
            PrintProps(printer, "ExtendedPrinterStatus");
            PrintProps(printer, "LastErrorCode");
            PrintProps(printer, "PrinterState");
            PrintProps(printer, "PrinterStatus");
            PrintProps(printer, "Status");
            PrintProps(printer, "WorkOffline");
            PrintProps(printer, "Local");
        }

    }
25
ответ дан 2 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: