tags:

views:

102

answers:

0

My below code works when the Form loads and I can get a list of Network Printers in listBox1. I am also able to see a specific printer's property name and value in listBox2.

private void Form1_Load(object sender, EventArgs e)
{
    foreach (String printer in PrinterSettings.InstalledPrinters)
    {
        listBox1.Items.Add(printer.ToString());
    }
}

private void button1_Click(object sender, EventArgs e)
{
    string printerName = "Ricoh-L4-1";
    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)
        {
            listBox2.Items.Add(string.Format("{0}: {1}", property.Name, property.Value));
        }
    } 
}

But when I try to find JobId, Owner, TotalPages for a particular printer (when I actually send jobs to print to that printer), those values do not display at all.

private void button2_Click(object sender, EventArgs e)
{
    listBox2.Items.Clear();
    string printerName = "Ricoh-L4-1";
    string query = string.Format("SELECT * from Win32_PrintJob WHERE Name LIKE '%{0}'", printerName);

    ManagementObjectSearcher SearchPrintJobs = new ManagementObjectSearcher(query);
    ManagementObjectCollection PrntJobCollection = SearchPrintJobs.Get();
    foreach (ManagementObject PrntJob in PrntJobCollection)
    {
        string m_JobID = PrntJob.Properties["JobId"].Value.ToString();
        string m_Owner = PrntJob.Properties["Owner"].Value.ToString();
        string m_TotalPages = PrntJob.Properties["TotalPages"].Value.ToString();
        listBox2.Items.Add(string.Format("{0}:{1}:{2}", m_JobID, m_Owner, m_TotalPages));
    }
}

Do you have any idea how to get above to work?