c# 擷取和取消本地列印佇列

來源:互聯網
上載者:User

 

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;
}

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;           

    }       
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.