日期:2014-05-18  浏览次数:20412 次

asp.net 获取打印机列表,分全给你
如题!
能实现吗?
怎么实现?
最好是网络打印机

------解决方案--------------------
//Get job API method 函数 EnumJobs,用来列出所指定打印机上正在打印的作业信息,这里给定打印机的引用就是通过使用上述OpenPrinter函数反馈回来的打印机句柄
//API函数EnumJobs用于列举给定打印机当前所有正在打印的任务状态信息,该函数可以列举给定打印机简要的或者详细的(Level决定)队列任务状态信息。在引用该函数时,
//通常先把cbBuf变量设置为0,以获得打印机队列任务的字节数,该字节数存储在pcbNeeded里以决定pJob变量大小,然后再次引用该函数,获得打印机队列任务的详细信息。
//参数: hPrinter 打印机句柄。 FirstJob 统计打印机队列任务数的起始点,0表示从第一个任务开始统计列举所有的打印任务。 NoJobs 需要列举的最大打印任务数。一般设为127。
//Level 标示存储在pJob里的信息格式。如果该值为1,数据以JOB_INFO_1的格式存储;如果该值为2,数据以JOB_INFO_2的格式存储。 pJob 数组变量,保存打印任务的所有信息;cbBuf设为0时,该值也为0。
//Level变量的值决定pJob的数据格式(JOB_INFO_1 OR JOB_INFO_2) cbBuf 该值通常为0。 pcbNeeded 存储打印机里打印任务的字节数。 pcReturned 用来存放打印任务数量的变量
[DllImport( "winspool.Drv ", EntryPoint = "EnumJobsA ", SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool EnumJobs(IntPtr hPrinter, Int32 firstJob, Int32 numJobs, Int32 Level,out IntPtr lpJob, Int32 cbBuf,out Int32 lpbSizeNeeded,out Int32 Returned);