Je dois obtenir le nom de l'imprimante par défaut. J'utiliserai C# mais je soupçonne que c'est plus une question de cadre et n'est pas spécifique à la langue.Quel est le meilleur moyen d'obtenir l'imprimante par défaut dans .NET
Répondre
La manière la plus simple que j'ai trouvée est de créer un nouvel objet PrinterSettings
. Il commence par toutes les valeurs par défaut, donc vous pouvez vérifier sa propriété Nom pour obtenir le nom de l'imprimante par défaut.
PrinterSettings
est dans System.Drawing.dll dans l'espace de noms System.Drawing.Printing
.
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
Sinon, vous pouvez peut-être utiliser la méthode PrinterSettings.InstalledPrinters
statique pour obtenir une liste de tous les noms d'imprimante, puis définissez la PrinterName propriété et vérifiez la IsDefaultPrinter. Je n'ai pas essayé cela, mais la documentation semble suggérer que cela ne fonctionnera pas. Apparemment IsDefaultPrinter n'est vrai que lorsque PrinterName n'est pas explicitement défini.
Une autre approche utilise WMI (vous aurez besoin d'ajouter une référence à l'assemblée System.Management):
public static string GetDefaultPrinterName()
{
var query = new ObjectQuery("SELECT * FROM Win32_Printer");
var searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
if (((bool?) mo["Default"]) ?? false)
{
return mo["Name"] as string;
}
}
return null;
}
À l'aide de PrinterSettings(), PrinterName renvoie parfois «L'imprimante par défaut n'est pas définie» comme nom d'imprimante, même si l'imprimante par défaut a été définie. La solution WMI ci-dessus de Nathan Baulch a fonctionné pour moi dans une telle situation. – Peter
Si vous voulez juste le nom de l'imprimante aucun avantage du tout. Mais WMI est capable de renvoyer tout un tas d'autres propriétés de l'imprimante:
using System;
using System.Management;
namespace Test
{
class Program
{
static void Main(string[] args)
{
ObjectQuery query = new ObjectQuery(
"Select * From Win32_Printer " +
"Where Default = True");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
Console.WriteLine(mo["Name"] + "\n");
foreach (PropertyData p in mo.Properties)
{
Console.WriteLine(p.Name);
}
}
}
}
}
et pas seulement les imprimantes. Si vous êtes intéressé par n'importe quel type de données liées à l'informatique, il y a de fortes chances que vous l'obteniez avec WMI. WQL (la version WMI de SQL) est également l'un de ses avantages.
- 1er créer une instance de l'objet
PrintDialog
. - puis appelez l'objet de dialogue d'impression et laissez le
PrinterName
vide. cela entraînera les fenêtres objet pour renvoyer le nom de l'imprimante defualt - écrire cette chaîne et l'utiliser comme nom de l'imprimante lorsque vous appelez la procédure d'impression
code:
Try
Dim _printDialog As New System.Windows.Forms.PrintDialog
xPrinterName = _printDialog.PrinterSettings.PrinterName '= "set as Default printer"
Catch ex As Exception
System.Windows.Forms.MessageBox.Show("could not printed Label.", "Print Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
J'utilise toujours dans ce cas le System.Printing.LocalPrintServer, ce qui permet également d'obtenir si l'imprimante est locale, réseau ou fax.
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
ou en utilisant une méthode statique GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
Essayez aussi cet exemple
PrinterSettings printerName = new PrinterSettings();
string defaultPrinter;
defaultPrinter = printerName.PrinterName;
Le code le plus rapide pour moi. Merci –
- 1. Quel est le moyen sûr d'ouvrir les URL dans le navigateur par défaut?
- 2. Quel est le moyen le plus propre de supprimer les "0" commençant par les dates par défaut dans Ruby/Rails?
- 3. Quel est le meilleur moyen de gérer QUERY_STRING en PHP?
- 4. Quel est le meilleur moyen de contourner XML dans une application .NET?
- 5. Quel est le meilleur moyen de créer une application d'instance unique dans .net?
- 6. Quel est le meilleur moyen de comparer plusieurs propriétés javabéennes?
- 7. Quel est le meilleur moyen de déployer des applications Web?
- 8. Quel est le meilleur moyen de calculer les hits de pages par jour dans MySQL?
- 9. Quel est le meilleur moyen de fermer un thread WCF?
- 10. Quel est le meilleur moyen de redimensionner un objet BitmapData?
- 11. Quel est le meilleur moyen de faire throbber en C#?
- 12. Quel est le meilleur moyen de copier une liste?
- 13. Quel est le meilleur moyen de communication interprocesseur sous Linux?
- 14. Quel est le raccourci par défaut d'intellisense dans vs2008?
- 15. Quel est le meilleur moyen d'envoyer de gros lots d'emails dans ASP.NET?
- 16. Quel est le meilleur dans asp.net 2.0?
- 17. Quel est le meilleur moyen de créer une application d'instance unique dans Compact Framework?
- 18. Quel est le meilleur outil .NET ORM: SubSonic ou WebWidgetry?
- 19. Quel est l'état par défaut des variables?
- 20. Quel est le meilleur moyen de remplacer les liens par des fonctions JS?
- 21. Quel est le meilleur moyen de trouver une chaîne spécifique dans le vecteur?
- 22. Quel est le type par défaut d'un attribut?
- 23. Quel est le meilleur moyen d'introduire le décryptage et l'affichage des mots de passe dans delphi
- 24. Quel est le remplacement par défaut de la fenêtre?
- 25. Quel est le taux d'animation par défaut de l'iPhone?
- 26. Quel est le meilleur moyen de renvoyer une erreur à un processus TSQL?
- 27. Meilleur moyen de transmettre char * à .Net
- 28. .NET XmlIgnore par défaut?
- 29. Quel est le meilleur: mysql_connect ou mysql_pconnect
- 30. Le .NET Framework est-il installé par défaut sur Vista?
Peut-être il vaut la peine de mentionner que les chaînes renvoyées de InstalledPrinters peuvent avoir un boîtier différent de celui NomImprimante propriété. Par exemple ce test a échoué sur mon système: Dim ps en tant que nouveau PrinterSettings Dim foundDefault As Boolean = False Pour chaque imprimante en tant que chaîne dans PrinterSettings.InstalledPrinters Si printer = ps.PrinterName Then foundDefault = True Fin Si Suivant Assert.IsTrue (foundDefault) – miasbeck
Voici la technique de bouclage qui fonctionne pour moi. : foreach (nom de la chaîne dans PrinterSettings.InstalledPrinters) { PrinterSettings ps = new PrinterSettings(); ps.PrinterName = nom; if (ps.IsDefaultPrinter) nom de retour; } return null; – BrokeMyLegBiking
Notez que cette méthode ne fonctionne pas si vous exécutez votre application en tant que service Windows. Je n'ai pas compris pourquoi. Je cours en tant que service local. –