public static PRINTER_INFO_1[] MyEnumPrinters(PrinterEnumFlags Flags) { uint cbNeeded = 0; uint cReturned = 0; IntPtr pPrInfo4 = IntPtr.Zero; uint size = 0; if (EnumPrinters(Flags, null, 1, IntPtr.Zero, size, ref cbNeeded, ref cReturned)) { return new PRINTER_INFO_1[] { }; } if (cbNeeded != 0) { pPrInfo4 = Marshal.AllocHGlobal((int)cbNeeded + 128); size = cbNeeded + 128; EnumPrinters(Flags, null, 1, pPrInfo4, size, ref cbNeeded, ref cReturned); if (cReturned != 0) { PRINTER_INFO_1[] printerInfo1 = new PRINTER_INFO_1[cReturned]; int offset = pPrInfo4.ToInt32(); Type type = typeof(PRINTER_INFO_1); int increment = Marshal.SizeOf(type); for (int i = 0; i < cReturned; i++) { printerInfo1[i] = (PRINTER_INFO_1)Marshal.PtrToStructure(new IntPtr(offset), type); offset += increment; } Marshal.FreeHGlobal(pPrInfo4); return printerInfo1; } } return new PRINTER_INFO_1[] { }; }
public static PRINTER_INFO_1[] MyEnumPrinters(PrinterEnumFlags Flags) { uint cbNeeded = 0; uint cReturned = 0; IntPtr pPrInfo4 = IntPtr.Zero; uint size = 0; if (EnumPrinters(Flags, null, 1, IntPtr.Zero, size, ref cbNeeded, ref cReturned)) { return(new PRINTER_INFO_1[] { }); } if (cbNeeded != 0) { pPrInfo4 = Marshal.AllocHGlobal((int)cbNeeded + 128); size = cbNeeded + 128; EnumPrinters(Flags, null, 1, pPrInfo4, size, ref cbNeeded, ref cReturned); if (cReturned != 0) { PRINTER_INFO_1[] printerInfo1 = new PRINTER_INFO_1[cReturned]; int offset = pPrInfo4.ToInt32(); Type type = typeof(PRINTER_INFO_1); int increment = Marshal.SizeOf(type); for (int i = 0; i < cReturned; i++) { printerInfo1[i] = (PRINTER_INFO_1)Marshal.PtrToStructure(new IntPtr(offset), type); offset += increment; } Marshal.FreeHGlobal(pPrInfo4); return(printerInfo1); } } return(new PRINTER_INFO_1[] { }); }