コード例 #1
0
ファイル: Program.cs プロジェクト: sintak/GitHelloWorld
        static void Main(string[] args)
        {
            test();

            MyEnumPrintersClass.PRINTER_INFO_1[] printers = MyEnumPrintersClass.MyEnumPrinters(MyEnumPrintersClass.PrinterEnumFlags.PRINTER_ENUM_REMOTE);
            foreach (MyEnumPrintersClass.PRINTER_INFO_1 printer in printers)
            {
                if (-1 == printer.pName.IndexOf("!!"))
                {
                    Console.WriteLine(printer.pName);
                }
                else
                {
                    uint   cbNeeded  = 0;
                    uint   cReturned = 0;
                    IntPtr pPrInfo4  = IntPtr.Zero;
                    uint   size      = 0;
                    string pNewName  = printer.pName;
                    MyEnumPrintersClass.EnumPrinters(MyEnumPrintersClass.PrinterEnumFlags.PRINTER_ENUM_NAME, pNewName, 1, IntPtr.Zero, size, ref cbNeeded, ref cReturned);
                    if (cbNeeded != 0)
                    {
                        pPrInfo4 = Marshal.AllocHGlobal((int)cbNeeded + 128);
                        size     = cbNeeded + 128;
                        MyEnumPrintersClass.EnumPrinters(MyEnumPrintersClass.PrinterEnumFlags.PRINTER_ENUM_NAME, pNewName, 1, pPrInfo4, size, ref cbNeeded, ref cReturned);
                        MyEnumPrintersClass.PRINTER_INFO_1[] printerInfo1 = new MyEnumPrintersClass.PRINTER_INFO_1[cReturned];
                        int  offset    = pPrInfo4.ToInt32();
                        Type type      = typeof(MyEnumPrintersClass.PRINTER_INFO_1);
                        int  increment = Marshal.SizeOf(type);
                        for (int i = 0; i < cReturned; i++)
                        {
                            printerInfo1[i] = (MyEnumPrintersClass.PRINTER_INFO_1)Marshal.PtrToStructure(new IntPtr(offset), type);
                            offset         += increment;
                            Console.WriteLine(printerInfo1[i].pName);
                        }
                        Marshal.FreeHGlobal(pPrInfo4);
                    }
                }
            }


            Console.ReadKey();
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: sintak/GitHelloWorld
        static void Main(string[] args)
        {
            test();

            MyEnumPrintersClass.PRINTER_INFO_1[] printers = MyEnumPrintersClass.MyEnumPrinters(MyEnumPrintersClass.PrinterEnumFlags.PRINTER_ENUM_REMOTE);
            foreach (MyEnumPrintersClass.PRINTER_INFO_1 printer in printers)
            {
                if (-1 == printer.pName.IndexOf("!!"))
                {
                    Console.WriteLine(printer.pName);
                }
                else
                {
                    uint cbNeeded = 0;
                    uint cReturned = 0;
                    IntPtr pPrInfo4 = IntPtr.Zero;
                    uint size = 0;
                    string pNewName = printer.pName;
                    MyEnumPrintersClass.EnumPrinters(MyEnumPrintersClass.PrinterEnumFlags.PRINTER_ENUM_NAME, pNewName, 1, IntPtr.Zero, size, ref cbNeeded, ref cReturned);
                    if (cbNeeded != 0)
                    {
                        pPrInfo4 = Marshal.AllocHGlobal((int)cbNeeded + 128);
                        size = cbNeeded + 128;
                        MyEnumPrintersClass.EnumPrinters(MyEnumPrintersClass.PrinterEnumFlags.PRINTER_ENUM_NAME, pNewName, 1, pPrInfo4, size, ref cbNeeded, ref cReturned);
                        MyEnumPrintersClass.PRINTER_INFO_1[] printerInfo1 = new MyEnumPrintersClass.PRINTER_INFO_1[cReturned];
                        int offset = pPrInfo4.ToInt32();
                        Type type = typeof(MyEnumPrintersClass.PRINTER_INFO_1);
                        int increment = Marshal.SizeOf(type);
                        for (int i = 0; i < cReturned; i++)
                        {
                            printerInfo1[i] = (MyEnumPrintersClass.PRINTER_INFO_1)Marshal.PtrToStructure(new IntPtr(offset), type);
                            offset += increment;
                            Console.WriteLine(printerInfo1[i].pName);
                        }
                        Marshal.FreeHGlobal(pPrInfo4);
                    }
                }
            }

            Console.ReadKey();
        }