国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

[C#] 獲取打印機列表

2019-11-17 02:33:16
字體:
供稿:網(wǎng)友

[C#] 獲取打印機列表

一:獲得本地安裝的打印機列表

注:(如果在“設(shè)備和打印機”中已經(jīng)添加了局域網(wǎng)的打印機設(shè)備,也算是本地安裝的打印機;沒有添加的則算作局域網(wǎng)打印機)

1,通過C#中PRinterSettings對象獲取,如下,然后通過foreach即可遍歷printers;

PrinterSettings.StringCollection printers = System.Drawing.Printing.PrinterSettings.InstalledPrinters;

2,PrintHelper類以及方法GetEnumPrinters2,見文章最后部分;

1 PRINTER_INFO_2[] printers = PrintHelper.GetEnumPrinters2();2 foreach (PRINTER_INFO_2 printer in printers)3 {4     listBox1.Items.Add(printer.pPrinterName);5 }
View Code

3,通過ManagementObjectCollection(需要添加System.Management引用)來查詢本地計算機中的打印機列表;

 1 // 獲取本地打印機列表 2 ManagementObjectCollection queryCollection; 3 string sql = "SELECT * FROM Win32_Printer"; 4 Dictionary<string, ManagementObject> dict = new Dictionary<string, ManagementObject>(); 5 ManagementObjectSearcher query = new ManagementObjectSearcher(sql); 6 queryCollection = query.Get(); 7 foreach (ManagementObject mo in queryCollection) 8 { 9     string oldName = mo["Name"].ToString();10     listBox1.Items.Add(oldName);11 }
View Code

二:獲取局域網(wǎng)打印機列表

1,PrintHelper類以及方法GetEnumPrinters2,見文章最后部分;

 1 PRINTER_INFO_1[] printers = PrintHelper.GetEnumPrinters(); 2 foreach (PRINTER_INFO_1 printer in printers) 3 { 4     if (-1 == printer.pName.IndexOf("!!")) 5     { 6         listBox1.Items.Add(printer.pName); 7     } 8     else 9     {10         uint pcbNeeded = 0;11         uint pcReturned = 0;12         IntPtr pPrInfo4 = IntPtr.Zero;13         uint size = 0;14         string pNewName = printer.pName;15         PrintHelper.EnumPrinters(PrinterEnumFlags.PRINTER_ENUM_NAME, pNewName, 1, IntPtr.Zero, size, ref pcbNeeded, ref pcReturned);16         if (pcbNeeded != 0)17         {18             pPrInfo4 = Marshal.AllocHGlobal((int)pcbNeeded);19             size = pcbNeeded;20             PrintHelper.EnumPrinters(PrinterEnumFlags.PRINTER_ENUM_NAME, pNewName, 1, pPrInfo4, size, ref pcbNeeded, ref pcReturned);21             PRINTER_INFO_1[] printerInfo1 = new PRINTER_INFO_1[pcReturned];22             int offset = pPrInfo4.ToInt32();23             Type type = typeof(PRINTER_INFO_1);24             int increment = Marshal.SizeOf(type);25             for (int i = 0; i < pcReturned; i++)26             {27                 printerInfo1[i] = (PRINTER_INFO_1)Marshal.PtrToStructure(new IntPtr(offset), type);28                 offset += increment;29                 listBox1.Items.Add(printerInfo1[i].pName);30             }31             Marshal.FreeHGlobal(pPrInfo4);32         }33     }34 }
View Code

PrintHelper類以及相關(guān)枚舉和信息類定義

 1 public class PrintHelper 2 { 3     [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)] 4     [return: MarshalAs(UnmanagedType.Bool)] 5     public static extern bool EnumPrinters(PrinterEnumFlags Flags, string Name, uint Level, IntPtr pPrinterEnum, uint cbBuff, ref uint pcbNeeded, ref uint pcReturned); 6  7     // 獲取網(wǎng)絡(luò)打印機 8     public static PRINTER_INFO_1[] GetEnumPrinters(PrinterEnumFlags flags) 9     {10         PRINTER_INFO_1[] printerInfo1 = new PRINTER_INFO_1[] { };11         uint pcbNeeded = 0;12         uint pcReturned = 0;13         IntPtr pPrInfo4 = IntPtr.Zero;14         uint size = 0;15         if (EnumPrinters(flags, null, 1, IntPtr.Zero, size, ref pcbNeeded, ref pcReturned))16         {17             return printerInfo1;18         }19         if (pcbNeeded != 0)20         {21             pPrInfo4 = Marshal.AllocHGlobal((int)pcbNeeded);22             size = pcbNeeded;23             EnumPrinters(flags, null, 1, pPrInfo4, size, ref pcbNeeded, ref pcReturned);24             if (pcReturned != 0)25             {26                 printerInfo1 = new PRINTER_INFO_1[pcReturned];27                 int offset = pPrInfo4.ToInt32();28                 Type type = typeof(PRINTER_INFO_1);29                 int increment = Marshal.SizeOf(type);30                 for (int i = 0; i < pcReturned; i++)31                 {32                     printerInfo1[i] = (PRINTER_INFO_1)Marshal.PtrToStructure(new IntPtr(offset), type);33                     offset += increment;34                 }35                 Marshal.FreeHGlobal(pPrInfo4);36             }37         }38 39         return printerInfo1;40     }41 42     // 獲取本地打印機43     public static PRINTER_INFO_2[] GetEnumPrinters2()44     {45         PRINTER_INFO_2[] printerInfo2 =  new PRINTER_INFO_2[] { }; 46         uint pcbNeeded = 0;47         uint pcReturned = 0;48         IntPtr pPrInfo4 = IntPtr.Zero;49         if (EnumPrinters(PrinterEnumFlags.PRINTER_ENUM_LOCAL, null, 2, IntPtr.Zero, 0, ref pcbNeeded, ref pcReturned))50         {51             return printerInfo2;52         }53         if (pcbNeeded != 0)54         {55             pPrInfo4 = Marshal.AllocHGlobal((int)pcbNeeded);56             EnumPrinters(PrinterEnumFlags.PRINTER_ENUM_LOCAL, null, 2, pPrInfo4, pcbNeeded, ref pcbNeeded, ref pcReturned);57             if (pcReturned != 0)58             {59                 printerInfo2 = new PRINTER_INFO_2[pcReturned];60                 int offset = pPrInfo4.ToInt32();61                 for (int i = 0; i < pcReturned; i++)62                 {63                     printerInfo2[i] = (PRINTER_INFO_2)Marshal.PtrToStructure(new IntPtr(offset), typeof(PRINTER_INFO_2));64                     offset += Marshal.SizeOf(typeof(PRINTER_INFO_2));65                 }66                 Marshal.FreeHGlobal(pPrInfo4);67             }68         }69 70         return printerInfo2;71     }72 }
PrintHelper
 1 [FlagsAttribute] 2 public enum PrinterEnumFlags 3 { 4     PRINTER_ENUM_DEFAULT = 0x00000001, 5     PRINTER_ENUM_LOCAL = 0x00000002, 6     PRINTER_ENUM_CONNECTIONS = 0x00000004, 7     PRINTER_ENUM_FAVORITE = 0x00000004, 8     PRINTER_ENUM_NAME = 0x00000008, 9     PRINTER_ENUM_REMOTE = 0x00000010,10     PRINTER_ENUM_SHARED = 0x00000020,11     PRINTER_ENUM_NETWORK = 0x00000040,12     PRINTER_ENUM_EXPAND = 0x00004000,13     PRINTER_ENUM_CONTAINER = 0x00008000,14     PRINTER_ENUM_ICONMASK = 0x00ff0000,15     PRINTER_ENUM_ICON1 = 0x00010000,16     PRINTER_ENUM_ICON2 = 0x00020000,17     PRINTER_ENUM_ICON3 =
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 哈巴河县| 荣成市| 潼南县| 电白县| 德江县| 韶关市| 开原市| 财经| 沙洋县| 永昌县| 津南区| 灌云县| 福建省| 枞阳县| 永康市| 海门市| 东港市| 新竹市| 汉中市| 凤庆县| 鄱阳县| 彭阳县| 沅陵县| 根河市| 贞丰县| 河北区| 砚山县| 岐山县| 汉沽区| 馆陶县| 托克托县| 浙江省| 林西县| 黄陵县| 藁城市| 册亨县| 定日县| 海宁市| 南京市| 琼结县| 子长县|