C# 管理 WebBrowser Print

来源:互联网 发布:北大青鸟软件测试 编辑:程序博客网 时间:2024/06/06 08:33

webBrowser 在打印时想要监控打印状态可以做如下的事情

1.监控是否已经执行打印命令

2.是否打印事件已完成

监控打印执行 需要引用 Microsoft Internet Controls 具体如下:

using System.Reflection;using System.Threading;using SHDocVw;private void PrintFacture_Load(object sender, EventArgs e)    {        string content = "Some HTML+CSS";        webBrowser1.Navigate("about:blank");        if (webBrowser1.Document != null)        {            webBrowser1.Document.Write(string.Empty);        }        webBrowser1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0);        webBrowser1.Document.Write(content);    }private void PrintFacture_Shown(object sender, EventArgs e)    {        string keyName = @"Software\Microsoft\Internet Explorer\PageSetup";        using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true))        {            if (key != null)            {                string old_footer = key.GetValue("footer").ToString();                string old_header = key.GetValue("header").ToString();                key.SetValue("footer", "");                key.SetValue("header", "");                var wbax = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;                wbax.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(PrintDone);                  webBrowser1.Print();                key.SetValue("footer", old_footer);                key.SetValue("header", old_header);            }        }    }private void PrintDone(object sender)    {        var wbax = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;        wbax.PrintTemplateTeardown -= new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(PrintDone);        Application.Exit();    }

之后

检测一个print job 是否完成可以这样。

  

private void checkJobStatus()        {            bool isfinished = true;            List<int> hairnetPrinterJobs = new List<int>();            SelectQuery query = new SelectQuery("Win32_PrintJob");            using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))            using (ManagementObjectCollection printJobs = searcher.Get())                foreach (ManagementObject printJob in printJobs)                {                    // The format of the Win32_PrintJob.Name property is "PrinterName,JobNumber"                    string name = (string)printJob["Name"];                    string[] nameParts = name.Split(',');                    string printerName = nameParts[0];                    string jobNumber = nameParts[1];                    string document = (string)printJob["Document"];                    string jobStatus = (string)printJob["JobStatus"];                }        }


0 0
原创粉丝点击