Я разработал приложение, в котором пользователь может добавить новый принтер и выполнить с ним задачу, при добавлении нового принтера пользователю необходимо указать 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-адресе или имени хоста, введенных пользователем. Пожалуйста, предложите способ, которым мы можем достичь этого. Возможно ли это?