怎么获取打印机和打印状态,还有其对应的打印文件的队列?

lg314 2010-08-30 02:05:41
如题.就像系统提供的打印机状态查看,同时也可以删除打印队列的文档.有什么办法可以实现吗?
...全文
796 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lg314 2010-08-30
  • 打赏
  • 举报
回复
Saint,GotPingBack,这个还要引用什么吗?
lg314 2010-08-30
  • 打赏
  • 举报
回复
谢谢,我试试看看
云瑀 2010-08-30
  • 打赏
  • 举报
回复

public bool CancelPrintJob(int printJobID)
{
// Variable declarations.
bool isActionPerformed = false;
string searchQuery;
String jobName;
char[] splitArr;
int prntJobID;
ManagementObjectSearcher searchPrintJobs;
ManagementObjectCollection prntJobCollection;
try
{
// Query to get all the queued printer jobs.
searchQuery = "SELECT * FROM Win32_PrintJob";
// Create an object using the above query.
searchPrintJobs = new ManagementObjectSearcher(searchQuery);
// Fire the query to get the collection of the printer jobs.
prntJobCollection = searchPrintJobs.Get();
// Look for the job you want to delete/cancel.
foreach (ManagementObject prntJob in prntJobCollection)
{
jobName = prntJob.Properties["Name"].Value.ToString();
// Job name would be of the format [Printer name], [Job ID]
splitArr = new char[1];
splitArr[0] = Convert.ToChar(",");
// Get the job ID.
prntJobID = Convert.ToInt32(jobName.Split(splitArr)[1]);
// If the Job Id equals the input job Id, then cancel the job.
if (prntJobID == printJobID)
{
// Performs a action similar to the cancel
// operation of windows print console
prntJob.Delete();
isActionPerformed = true;
break;
}
}
return isActionPerformed;
}
catch (Exception sysException)
{
// Log the exception.
return false;
}
}

Cancel print job
云瑀 2010-08-30
  • 打赏
  • 举报
回复

Dictionary<string, int> GetAllPrinterQueues()
{
RaiseLog("Getting print queue counts");
Dictionary<string, int> TempDict = new Dictionary<string, int>();

PrintServer myPrintServer = new PrintServer(); // Get all the printers installed on this PC

// List the print server's queues
PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();
String printQueueNames = "My Print Queues:\n\n";
foreach (PrintQueue pq in myPrintQueues)
{
Saint.StCommon.Wait((decimal)2000); // 2 seconds of "Application.DoEvents(), not thread sleep
if (GotPingBack(pq.Name))
{
int PGcount = 0;
try
{
if (pq.NumberOfJobs > 0)
{
// We know there are jobs. So we *have* to be able to get the collection at some point
DateTime Bailout = DateTime.Now.AddSeconds(10); // Keep trying for 10 seconds or until I get a valid response
string ErrMsg = "notyetretreived";
while (Bailout > DateTime.Now && ErrMsg != string.Empty)
{
try
{
var Jobs = pq.GetPrintJobInfoCollection();
Saint.StCommon.Wait((int)2);
foreach (PrintSystemJobInfo Job in Jobs)
{
PGcount += Job.NumberOfPages;
ErrMsg = string.Empty;
}
}
catch (Exception k)
{
ErrMsg = k.Message;
Console.WriteLine(string.Format("{0}: {1}", pq.Name, k.Message));
}
}
}
}
catch
{
Console.WriteLine("Exception dork");
}
Console.WriteLine(string.Format("{2}\t{0}\t{1}", pq.Name, PGcount, DateTime.Now.ToString("HH:mm:ss.fff")));
TempDict.Add(pq.Name, PGcount);
}
}
return TempDict;
}

Get print job queue
云瑀 2010-08-30
  • 打赏
  • 举报
回复
using System.Management; 
string printerName = "HP";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}%'", printerName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection coll = searcher.Get();

foreach (ManagementObject printer in coll)
{
foreach (PropertyData property in printer.Properties)
{
MessageBox.Show(string.Format("{0}: {1}", property.Name, property.Value));
}
}

记得Add reference, System.Mamagement这DLL
kj289907795 2010-08-30
  • 打赏
  • 举报
回复
收藏了 。等待高手指点
zgke 2010-08-30
  • 打赏
  • 举报
回复
使用API EnumJobs
http://blog.csdn.net/zgke/archive/2010/05/11/5579528.aspx 可能对你有帮助
kj289907795 2010-08-30
  • 打赏
  • 举报
回复
沙发~

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧