如题。
PrintServer myPrintServer = new PrintServer(); 
PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();
网上都说是这段代码  但是我用了不行
有谁做过的?

解决方案 »

  1.   

    先用平台调用,使用windows API:        [StructLayout(LayoutKind.Sequential)]
            public struct SYSTEMTIME
            {
                public short wYear;
                public short wMonth;
                public short wDayOfWeek;
                public short wDay;
                public short wHour;
                public short wMinute;
                public short wSecond;
                public short wMilliseconds;
            }        [DllImport("winspool.drv", CharSet = CharSet.Auto)]
            public static extern bool OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault);        [DllImport("winspool.drv", CharSet = CharSet.Auto)]
            public static extern bool ClosePrinter(IntPtr hPrinter);        [DllImport("winspool.drv", CharSet = CharSet.Auto)]
            public static extern int EnumJobs(IntPtr hPrinter, int FirstJob, int NoJobs, int Level, IntPtr pInfo, int cdBuf, out int pcbNeeded, out int pcReturned);        [DllImport("winspool.drv", CharSet = CharSet.Auto)]
            public static extern long GetJob(long hPrinter, long JobId, long Level, long buffer, long pbSize, long pbSizeNeeded);        /// <summary>
            /// 得到具体打印机作业数
            /// </summary>
            /// <param name="printerToPeek">打印机名称</param>
            /// <returns></returns>
            public static int peekPrinterJobs(string printerToPeek)
            {
                IntPtr handle;
                int FirstJob = 0;
                int NumJobs = 127;
                int pcbNeeded;
                int pcReturned;            // open printer 
                OpenPrinter(printerToPeek, out handle, IntPtr.Zero);            // get num bytes required, here we assume the maxt job for the printer quest is 128 (0..127) 
                EnumJobs(handle, FirstJob, NumJobs, 1, IntPtr.Zero, 0, out pcbNeeded, out pcReturned);
                // allocate unmanaged memory 
                IntPtr pData = Marshal.AllocHGlobal(pcbNeeded);            // get structs 
                EnumJobs(handle, FirstJob, NumJobs, 1, pData, pcbNeeded, out pcbNeeded, out pcReturned);            //Close the Printer
                ClosePrinter(handle);            return pcReturned;
            }
      

  2.   

    版本的类库:net3.5以上:   PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues(); 
       String printQueueNames = "My Print Queues:\n\n";    foreach (PrintQueue pq in myPrintQueues) 
       { 
          printQueueNames += "\t" + pq.Name + "\n"; 
       } 
       Console.WriteLine(printQueueNames); 
       Console.WriteLine("\nPress Return to continue."); 
       Console.ReadLine();
      

  3.   

    顶1楼,绝对正确的。至于2楼,能返回一个int值就好了。 一楼printerToPeek 可以直接string 例如"print1"