Определить IP-адрес / имя хоста принтера, а не компьютера C# - PullRequest
0 голосов
/ 20 марта 2020

Я разработал приложение, в котором пользователь может добавить новый принтер и выполнить с ним задачу, при добавлении нового принтера пользователю необходимо указать IP-адрес или имя хоста. Если введен действительный IP-адрес или имя хоста, а устройство подключено к сети, устройство будет добавлено в приложение в качестве принтера.

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

Я искал несколько способов, где я могу проверить, что IP-адрес или имя хоста, данное пользователем, является допустимым принтером или компьютером.

Некоторые из способов, которые я попробовал, следуют

Используется подход класса WIN32 Используя этот подход, я получаю список принтеров, которые установлены на моей машине.

static void Main(string[] args)
    {
        var scope = new ManagementScope(@"\root\cimv2");
        scope.Connect();
        var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");
        var results = searcher.Get();
        Console.WriteLine("Network printers list:");
        foreach (var printer in results)
        {
            var portName = printer.Properties["PortName"].Value;

            var searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_TCPIPPrinterPort where Name LIKE '" + portName + "'");
            var results2 = searcher2.Get();
            foreach (var printer2 in results2)
            {
                Console.WriteLine("Name:" + printer.Properties["Name"].Value);
                //Console.WriteLine("PortName:" + portName);
                Console.WriteLine("PortNumber:" + printer2.Properties["PortNumber"].Value);
                Console.WriteLine("HostAddress:" + printer2.Properties["HostAddress"].Value);
            }
            Console.WriteLine();
        }

        Console.ReadLine();
       }

Подход поиска по каталогу В этом подходе я Я не нашел никаких результатов на моей машине, не знаю причину.

   static void Main(string[] args)
        {
    List<string> list = new List<string>();
        DirectorySearcher directorySearcher = new DirectorySearcher();
        directorySearcher.SearchRoot = new DirectoryEntry("");
        directorySearcher.Filter = "(|(&(objectCategory=printQueue)(name=" + hostName + "*)))";
        directorySearcher.Sort = new SortOption("name", SortDirection.Ascending);
        try
        {
            SearchResultCollection searchResultCollection = directorySearcher.FindAll();
            foreach (SearchResult item in searchResultCollection)
            {
                IEnumerator enumerator2 = item.Properties.Values.GetEnumerator();
                foreach (string propertyName in item.Properties.PropertyNames)
                {
                    enumerator2.MoveNext();
                    if (propertyName.ToLower(CultureInfo.InvariantCulture).Contains("uncname"))
                    {
                        object[] array = new object[((ResultPropertyValueCollection)enumerator2.Current).Count];
                        ((ResultPropertyValueCollection)enumerator2.Current).CopyTo(array, 0);
                        list.Add((string)array[0]);
                    }
                }
            }
            return list;
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException(ex.Message);
        }
}

Я хочу определить, является ли тип устройства, например, компьютер или принтер, основанным на IP-адресе или имени хоста, введенных пользователем. Пожалуйста, предложите способ, которым мы можем достичь этого. Возможно ли это?

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