我需要獲取默認打印機名稱。我將使用C#,但我懷疑這更像是一個框架問題,而不是語言特定的。什麼是在.NET中獲取默認打印機的最佳方式
60
A
回答
92
我發現的最簡單的方法是創建一個新的PrinterSettings
對象。它以所有默認值開始,因此您可以檢查其名稱屬性以獲取默認打印機的名稱。
PrinterSettings
在命名空間System.Drawing.Printing
中的System.Drawing.dll中。
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
或者,也許你可以使用靜態PrinterSettings.InstalledPrinters
方法來獲取所有打印機的名稱列表,然後設置PrinterName的財產和檢查IsDefaultPrinter。我沒有嘗試過,但文檔似乎表明它不起作用。顯然IsDefaultPrinter只有當PrinterName沒有明確設置時才爲true。
27
另一種方法是使用WMI(你需要添加一個引用到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;
}
10
如果你只是想打印機名稱毫無優勢可言。但WMI能夠返回一大堆其他打印機屬性:
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);
}
}
}
}
}
而不僅僅是打印機。如果您對任何類型的計算機相關數據感興趣,可以通過WMI獲得。 WQL(WMI版本的SQL)也是它的優勢之一。
1
- 1st創建一個
PrintDialog
對象的實例。 - 然後調用打印對話框對象並將
PrinterName
留爲空白。這將導致Windows對象這個返回defualt打印機名稱 - 寫一個字符串,當你調用打印過程
代碼中使用它作爲打印機名稱:
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
7
我用在這種情況下始終是System.Printing.LocalPrintServer,它也可以獲取打印機是本地,網絡還是傳真。
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
或使用靜態方法GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
1
嘗試也在本示例
PrinterSettings printerName = new PrinterSettings();
string defaultPrinter;
defaultPrinter = printerName.PrinterName;
相關問題
- 1. 將Gtk.Widget打印到打印機的最佳方式是什麼?
- 2. 在ASP.Net中打印PDF報告的最佳方式是什麼?
- 3. 從c#/ .net打印的最佳方式?
- 4. 獲取默認的打印機遠程
- 5. 通過網絡直接打印到打印機(如POS打印機)的最佳方式是什麼?
- 6. 什麼是生成文件並以.net格式打印的最佳方式?
- 7. VBS - 獲取默認打印機
- 8. Java。獲取系統默認打印機
- 9. 在NumPy中獲得隨機數的最佳方式是什麼?
- 10. 創建默認電子郵件的最佳方式是什麼?
- 11. 什麼是在.NET中「平方」圖像的最佳方式?
- 12. c#ms chart - 打印圖表的最佳方式是什麼?
- 13. 在strings.xml中獲取attrubute值的最佳方式是什麼?
- 14. 在AsyncTask中獲取/使用Context的最佳方式是什麼?
- 15. 在PHP中獲取instagram feed的最佳方式是什麼?
- 16. 在PHP中獲取HashTable的最佳方式是什麼?
- 17. 在django中獲取row_num的最佳方式是什麼?
- 18. 在jquery中獲取父div的最佳方式是什麼?
- 19. 在ASP.NET中打印的最佳方式
- 20. 如何使用不帶打印機的默認打印機(VB Net)打印PDF
- 21. 在python中使用默認值做列表[0]的最佳方式是什麼?
- 22. 在.NET XmlDocument中移動「小孩」的最佳方式是什麼?
- 23. 在C#.NET中製作遊戲的最佳方式是什麼?
- 24. 在.net中創建動態GUI的最佳方式是什麼?
- 25. 什麼是在JavaScript中打印動態表格的最佳方式?
- 26. 在javascript中打印出一個長點的最佳方式是什麼?
- 27. PrintQueue是打印機的默認打印機?
- 28. 重寫spacemacs中的默認鍵綁定的最佳方式是什麼?
- 29. 什麼是在JavaScript中獲得隨機數的最佳方法
- 30. 什麼是gdb打印命令的默認格式
也許是值得一提的是從InstalledPrinters返回的串可以具有不同的殼體比PrinterName的屬性。例如,此測試在我的系統上失敗: Dim ps As New PrinterSettings Dim foundDefault As Boolean = False For Each Printer As String In PrinterSettings.InstalledPrinters If printer = ps。PrinterName Then foundDefault = True End If Next Assert.IsTrue(foundDefault) – miasbeck 2011-05-09 10:28:36
這裏是循環技術,它適用於我。 :foreach(PrinterSettings.InstalledPrinters中的字符串名稱) { PrinterSettings ps = new PrinterSettings(); ps.PrinterName = name; 012(ps.IsDefaultPrinter) return name; } return null; – BrokeMyLegBiking 2013-03-18 21:08:31
請注意,如果您將應用程序作爲Windows服務運行,則此方法不起作用。我還沒有弄清楚爲什麼。我作爲本地服務運行。 – 2017-04-14 13:26:42