pint 类吗?不好意思,我是初学者,
.net 类库,是在 msdn 里面找吗!
.net 类库,是在 msdn 里面找吗!
解决方案 »
- 请高手回答: 一个关于RollBack()的问题一直没得到很好的回答.
- 关于c#网页设计里一个很简单问题~~
- 想问个半新手问题~现行阶段C#算是成熟了吗?
- 那位帅哥帮忙把这段JS MD5加密的脚本 写成C#的
- c#数据显示问题
- C#打开iframe问题(不是想象的那么简单)
- 我用微软和那个叫什么vchm做帮助的时候,删除原文件,chm就访问不了文件
- 如何删除XML中的接点
- datagrid问题!如何去替换新增一行时显示的"(空)"这个字符为""?
- 在for循环中,怎样做到每完成一次循环,就暂停,按下回车键后继续下一次循环
- serialPort1_DataReceived不进事件
- C#Winform中工具箱里面所有控件全部为灰色
private PrintQueue GetPrintQueue(string PrinterName)
{
LocalPrintServer pr = new LocalPrintServer();
pr.Refresh();
EnumeratedPrintQueueTypes[] enumerationFlags = {EnumeratedPrintQueueTypes.Local,
EnumeratedPrintQueueTypes.Connections,
};
foreach (PrintQueue pq in pr.GetPrintQueues(enumerationFlags))
{
if (pq.Name == PrinterName)
{
return pq;
}
}
return null;
}
判断状态: if (printQueue.IsBusy)
printStateText = "打印机正忙";
else if (printQueue.IsDoorOpened)
printStateText = "打印机门被打开";
else if (printQueue.IsInError)
printStateText = "打印机出错";
else if (printQueue.IsInitializing)
printStateText = "打印机正在初始化";
else if (printQueue.IsIOActive)
printStateText = "打印机正在与打印服务器交换数据";
else if (printQueue.IsManualFeedRequired)
printStateText = "打印机出错";
else if (printQueue.IsNotAvailable)
printStateText = "打印机状态信息不可用";
else if (printQueue.IsTonerLow)
printStateText = "打印机墨粉用完";
else if (printQueue.IsOffline)
printStateText = "打印机脱机";
else if (printQueue.IsOutOfMemory)
printStateText = "打印机无可用内存";
else if (printQueue.IsOutputBinFull)
printStateText = "打印机输出纸盒已满";
else if (printQueue.IsPaperJammed)
printStateText = "打印机卡纸";
else if (printQueue.IsOutOfPaper)
printStateText = "打印机中没有或已用完当前打印作业所需的纸张类型";
else if (printQueue.QueueStatus == PrintQueueStatus.PaperProblem)
printStateText = "打印机中的纸张导致未指定的错误情况";
else if (printQueue.IsPaused)
printStateText = "打印队列已暂停";
else if (printQueue.IsPendingDeletion)
printStateText = "打印队列正在删除打印作业";
else if (printQueue.IsPrinting)
printStateText = "设备正在打印";
else if (printQueue.IsProcessing)
printStateText = "设备正在执行某种工作,如果此设备是集打印机、传真机和扫描仪于一体的多功能设备,则不需要打印.";
else if (printQueue.IsServerUnknown)
printStateText = "打印机处于错误状态";
//else if (printQueue.IsWarmingUp)
// printStateText = "打印机正在预热";
结果 这些条件判断都不在里面。
/// 已解析过的打印任务列表
/// </summary>
public static List<UInt32> AnalyzedJobs = new List<uint>();//20141112 /// <summary>
/// 获取指定打印任务的信息
/// </summary>
/// <param name="jobid">打印任务的ID</param>
/// <param name="level">打印信息的等级(1 or 2)</param>
public static PRINTED_ITEM_STRU AnalyzePrintJobInfo(string printername, IntPtr hprinter, UInt32 jobid, WinSpool.JOBSTATUS jobstatus, UInt32 level)
{
if (hprinter == IntPtr.Zero)
throw new Exception("No30:打印句柄没有初始化!"); PRINTED_ITEM_STRU cstru = new PRINTED_ITEM_STRU(); if (AnalyzedJobs.Contains(jobid))//已经解析过则不再解析//20141112
{
return cstru;
} //防止对同一个打印任务进行重复的解析
if (jobstatus != WinSpool.JOBSTATUS.JOB_STATUS_PRINTING && jobstatus != 0)
{
//数据不需要分析
return cstru;
} try
{ //20141112
if (AnalyzedJobs.Count > 100)
AnalyzedJobs.RemoveRange(0, 10);
AnalyzedJobs.Add(jobid);
//20141112 end
UInt32 lNeeded = 0;
UInt32 lRetrieve = 0;
//获取任务信息的字节数
bool ret = WinSpool.GetJob(hprinter, jobid, level, IntPtr.Zero, 0, out lNeeded); //初始化对应的内存空间
lRetrieve = lNeeded;
IntPtr pData = Marshal.AllocHGlobal((int)lRetrieve); //获取任务信息
ret = WinSpool.GetJob(hprinter, jobid, level, pData, lRetrieve, out lNeeded);
if (ret == true)//如果获取成功,则进行分析
{
//根据level使用对应的结构体
int pTemp = pData.ToInt32();//start pointer
switch (level)
{
case 1:
WinSpool.JOB_INFO_1 jobinfo = new WinSpool.JOB_INFO_1();
jobinfo = (WinSpool.JOB_INFO_1)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_1));
cstru.file_name = jobinfo.pDocument;
cstru.page_num = (int)jobinfo.TotalPages;
break;
case 2:
WinSpool.JOB_INFO_2 jobinfo2 = new WinSpool.JOB_INFO_2();
jobinfo2 = (WinSpool.JOB_INFO_2)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_2));
cstru.file_name = jobinfo2.pDocument;
cstru.page_num = jobinfo2.TotalPages;
cstru.time = jobinfo2.StartTime.ToString();
break;
default:
WinSpool.JOB_INFO_1 jobinfod = new WinSpool.JOB_INFO_1();
jobinfod = (WinSpool.JOB_INFO_1)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_1));
cstru.file_name = jobinfod.pDocument;
cstru.page_num = (int)jobinfod.TotalPages;
break;
}
}
//对结构体进行赋值
PrintDocument pdoc = new PrintDocument();
pdoc.PrinterSettings.PrinterName = printername; cstru.printer_name = printername;
cstru.copy_num = pdoc.PrinterSettings.Copies;
cstru.time = string.Empty;
cstru.color = pdoc.PrinterSettings.DefaultPageSettings.Color == false ? 0 : 1;
cstru.duplex = pdoc.PrinterSettings.Duplex == Duplex.Simplex ? 0 : 1;
cstru.paper_type = pdoc.PrinterSettings.DefaultPageSettings.PaperSize.PaperName; //释放内存空间
Marshal.FreeHGlobal(pData);
}
catch (Exception ex)
{ Console.WriteLine(ex.Message);
}
return cstru; }
/// 已解析过的打印任务列表
/// </summary>
public static List<UInt32> AnalyzedJobs = new List<uint>();//20141112 /// <summary>
/// 获取指定打印任务的信息
/// </summary>
/// <param name="jobid">打印任务的ID</param>
/// <param name="level">打印信息的等级(1 or 2)</param>
public static PRINTED_ITEM_STRU AnalyzePrintJobInfo(string printername, IntPtr hprinter, UInt32 jobid, WinSpool.JOBSTATUS jobstatus, UInt32 level)
{
if (hprinter == IntPtr.Zero)
throw new Exception("No30:打印句柄没有初始化!"); PRINTED_ITEM_STRU cstru = new PRINTED_ITEM_STRU(); if (AnalyzedJobs.Contains(jobid))//已经解析过则不再解析//20141112
{
return cstru;
} //防止对同一个打印任务进行重复的解析
if (jobstatus != WinSpool.JOBSTATUS.JOB_STATUS_PRINTING && jobstatus != 0)
{
//数据不需要分析
return cstru;
} try
{
//20141112
if (AnalyzedJobs.Count > 100)
AnalyzedJobs.RemoveRange(0, 10);
AnalyzedJobs.Add(jobid);
//20141112 end UInt32 lNeeded = 0;
UInt32 lRetrieve = 0;
//获取任务信息的字节数
bool ret = WinSpool.GetJob(hprinter, jobid, level, IntPtr.Zero, 0, out lNeeded); //初始化对应的内存空间
lRetrieve = lNeeded;
IntPtr pData = Marshal.AllocHGlobal((int)lRetrieve); //获取任务信息
ret = WinSpool.GetJob(hprinter, jobid, level, pData, lRetrieve, out lNeeded);
if (ret == true)//如果获取成功,则进行分析
{
//根据level使用对应的结构体
int pTemp = pData.ToInt32();//start pointer
WinSpool.JOB_INFO_2 info2 = new WinSpool.JOB_INFO_2();
info2 = (WinSpool.JOB_INFO_2)Marshal.PtrToStructure
(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_2)); int intRet = System.Convert.ToInt32(info2.Status); //Marshal.FreeHGlobal(new IntPtr(pTemp)); //WinSpool.ClosePrinter(hprinter);
switch (level)
{
case 1:
WinSpool.JOB_INFO_1 jobinfo = new WinSpool.JOB_INFO_1();
jobinfo = (WinSpool.JOB_INFO_1)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_1));
cstru.file_name = jobinfo.pDocument;
cstru.page_num = (int)jobinfo.TotalPages;
break;
case 2:
WinSpool.JOB_INFO_2 jobinfo2 = new WinSpool.JOB_INFO_2();
jobinfo2 = (WinSpool.JOB_INFO_2)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_2)); WinSpool.DEVMODE devm = new WinSpool.DEVMODE();
devm = (WinSpool.DEVMODE)Marshal.PtrToStructure(jobinfo2.pDevMode, typeof(WinSpool.DEVMODE)); cstru.copy_num = devm.dmCopies;
cstru.color = devm.dmColor;
cstru.duplex = devm.dmDuplex;
cstru.paper_type = devm.dmPaperSize.ToString();
cstru.file_name = jobinfo2.pDocument;
cstru.page_num = jobinfo2.TotalPages;
cstru.time = jobinfo2.StartTime.ToString();
break;
default:
WinSpool.JOB_INFO_1 jobinfod = new WinSpool.JOB_INFO_1();
jobinfod = (WinSpool.JOB_INFO_1)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_1));
cstru.file_name = jobinfod.pDocument;
cstru.page_num = (int)jobinfod.TotalPages;
break;
}
}
cstru.printer_name = printername;
////对结构体进行赋值
//PrintDocument pdoc = new PrintDocument();
//pdoc.PrinterSettings.PrinterName = printername; //cstru.copy_num = pdoc.PrinterSettings.Copies;
//cstru.time = string.Empty;
//cstru.color = pdoc.PrinterSettings.DefaultPageSettings.Color == false ? 0 : 1;
//cstru.duplex = pdoc.PrinterSettings.Duplex == Duplex.Simplex ? 0 : 1;
//cstru.paper_type = pdoc.PrinterSettings.DefaultPageSettings.PaperSize.PaperName; //释放内存空间
Marshal.FreeHGlobal(pData); }
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return cstru;
}