首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么获取打印机将要打印的队列数

2012-04-23 
如何获取打印机将要打印的队列数?如题。。。。PrintServer myPrintServer new PrintServer()PrintQueueColl

如何获取打印机将要打印的队列数?
如题。。。。
PrintServer myPrintServer = new PrintServer(); 
PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();
网上都说是这段代码 但是我用了不行
有谁做过的?

[解决办法]
先用平台调用,使用windows API:

C# code
        [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;        }
[解决办法]
版本的类库:net3.5以上:
C# code
   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(); 

热点排行