Является ли их правильным способом фильтрации перенаправленных принтеров и факсов в C# - PullRequest
0 голосов
/ 16 января 2020

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

Я использовал реестр win32 для получения всех принтеров и хранения простого строкового массива (исключая принтеры), чтобы проверить, содержат ли эти имена идентифицированные принтеры. Если так, я просто отфильтрую их.

using Microsoft.Win32;

private readonly RegistryKey baseRegistryKey = Registry.LocalMachine;
private readonly string pathOfPrintersSubkey = "SYSTEM\\CurrentControlSet\\Control\\Print\\Printers\\";

public Dictionary<string, Dictionary<string, string>> GetAllPrinters()
{
    using (RegistryKey registrykey = baseRegistryKey.OpenSubKey(pathOfPrintersSubkey))
    {
        var printers = new Dictionary<string, Dictionary<string, string>>();

        if (registrykey == null) return printers;
        var valueNames = registrykey.GetSubKeyNames();

        //get atributes of each printer
        foreach (string printerName in valueNames)
        {
            string pathToPrinter = string.Concat(pathOfPrintersSubkey, printerName);
            using (var printerRegistrykey = baseRegistryKey.OpenSubKey(pathToPrinter + "\\"))
            {
                var printerAtributes = new Dictionary<string, string>();
                if (printerRegistrykey != null)
                {
                    var atributes = printerRegistrykey.GetValueNames();

                foreach (string atributeKey in atributes)
                {
                    string printerAtributeValue = printerRegistrykey.GetValue(atributeKey).ToString();
                    printerAtributes.Add(atributeKey, printerAtributeValue);
                }
                }
                printers.Add(printerName, printerAtributes);
            }
        }
        return printers;
    }
}

public static readonly string[] excludePrinters =
        {
            "send to onenote ", 
            "microsoft xps document writer",
            "fax",
            "microsoft print to pdf",
            "(redirected "
        };

public static bool IsExcludedPrinter(string printerName)
{
    return excludePrinters.Any(printerName.ToLowerInvariant().Contains) ? true : false;
}

var allPrinters = GetAllPrinters();


foreach (string printer in printersFromRegistery.Keys.ToList())
    if (IsExcludedPrinter(printer))
        printersFromRegistery.Remove(printer);

var filterdPrinters = printersFromRegistery;
return filterdPrinters;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...