2009-11-09 2 views
0

En utilisant la nouvelle API d'impression .net (System.Printing.dll), comment obtenez-vous l'adresse IP d'une imprimante réseau?En utilisant la nouvelle API d'impression .net (System.Printing.dll), comment obtenez-vous l'adresse IP d'une imprimante réseau?

Les classes je regarde sont

Voici quelques exemples de code

PrintServer printServer = new PrintServer(@"\\PrinterServerName"); 
foreach (PrintQueue queue in printServer.GetPrintQueues()) 
{ 
    Debug.WriteLine(queue.Name); 
    Debug.WriteLine(queue.QueuePort.Name); 
    //how do i get the ipaddress of the printer attached to the queue? 
} 

Répondre

0

Jusqu'ici j'ai ceci. J'ai dû recourir à ManagementObjectSearcher pour obtenir l'adresse IP du port.

Je vais accepter cette réponse pour l'instant. Si quelqu'un connaît un moyen de le faire sans ManagementObjectSearcher, j'accepterai cette réponse à la place.

public virtual IEnumerable<Printer> GetPrinters() 
{ 
    var ports = new Dictionary<string, IPAddress>(); 
    var selectQuery = new SelectQuery("Win32_TCPIPPrinterPort"); 
    selectQuery.SelectedProperties.Add("CreationClassName"); 
    selectQuery.SelectedProperties.Add("Name"); 
    selectQuery.SelectedProperties.Add("HostAddress"); 
    selectQuery.Condition = "CreationClassName = 'Win32_TCPIPPrinterPort'"; 

    using (var searcher = new ManagementObjectSearcher(Scope, selectQuery)) 
    { 
     var objectCollection = searcher.Get(); 
     foreach (ManagementObject managementObjectCollection in objectCollection) 
     { 
      var portAddress = IPAddress.Parse(managementObjectCollection.GetProperty<string>("HostAddress")); 
      ports.Add(managementObjectCollection.GetProperty<string>("Name"), portAddress); 
     } 
    } 


    using (var printServer = new PrintServer(string.Format(@"\\{0}", PrinterServerName))) 
    { 
     foreach (var queue in printServer.GetPrintQueues()) 
     { 
      if (!queue.IsShared) 
      { 
       continue; 
      } 
      yield return new Printer 
         { 
          Location = queue.Location, 
          Name = queue.Name, 
          PortName = queue.QueuePort.Name, 
          PortAddress = ports[queue.QueuePort.Name] 
         }; 
     } 
    } 
} 
+0

Alors, est-il possible d'imprimer sur une imprimante réseau à partir d'ASP.NET? S'il vous plaît voir ma question à http://stackoverflow.com/questions/3729153/printing-from-asp-net-to-a-network-printer – Prabhu

0

Vous pouvez obtenir le IPAddress en utilisant le nom de la machine de l'imprimante:

+0

Comment obtenez-vous le nom de l'imprimante? PrintQueue.Name n'est pas le nom de l'ordinateur car il est paramétrable par l'utilisateur – Simon

+0

n'est-ce pas (@ "\\ PrinterServerName") le nom du serveur d'impression? –

+0

qui est le serveur d'impression. mais chaque imprimante sur ce serveur peut avoir sa propre adresse ip – Simon

Questions connexes