Delphi必学技巧:枚举打印机
添加时间: 2006-2-25 5:00:25 作者: Delphi教程 阅读次数:104 来源: http://www.d9soft.com
在某些情况下,我们需要枚举网内的打印机,试试以下的代码,很有可能帮得了你。
| using System; using System.Runtime.InteropServices; using System.Runtime.Serialization; namespace Sample.GetPrinter PRINTER_ENUM printerKind = GetPrinterConType(pt); PrinterSearcher p = new PrinterSearcher(); PrinterSearcher.PrinterInfo[] printers = p.Search(printerKind); foreach(PrinterSearcher.PrinterInfo pi in printers) static PRINTER_ENUM GetPrinterConType(int ins) |
| case 6: return PRINTER_ENUM.SHARED; case 7: return PRINTER_ENUM.NETWORK; default: return PRINTER_ENUM.LOCAL ; } } }
#region 异常派生 EnumPrinterException //加上这个属性可以按导出到非托管对像的顺序排序 public class PrinterSearcher uint iNeeded = 0, iReturned = 0, iSize = 0; |
| //返回由上一个非托管函数返回的错误代码,该函数是使用设置了 - //DllImport属性中SetLastError=true 标志的平台调用来调用的 int err = Marshal.GetLastWin32Error(); iSize = iNeeded; if (iNeeded != 0) #region PrinterInfo #region EnumPrinters |
| private static extern bool EnumPrinters ([MarshalAs(UnmanagedType.U4)] PRINTER_ENUM flags, [MarshalAs(UnmanagedType.LPStr)] string sName, uint iLevel, IntPtr pPrinterDesc, uint iSize, [MarshalAs(UnmanagedType.U4)] ref uint iNeeded, [MarshalAs(UnmanagedType.U4)] ref uint iReturned ); #endregion #region GetPrinterInfoFromMemory for(int i = 0; i < numPrinters; i++) prInfo = new IntPtr(prInfo.ToInt32() + Marshal.SizeOf(typeof(PRINTER_INFO_1))); private void ThrowEnumPrinterException() |
上一篇文章: 对使用Delphi制作DLL复用文件的建议 下一篇文章: Delphi高精度计时方法
相关文章:

