消息处理模拟点击
using System; using System.Drawing; using System.Drawing.Printing; using System.Printing; using System.Runtime.InteropServices; namespace ConsoleApplication4 { /// <summary> /// 控制台玩 Microsoft XPS Document 打印 /// </summary> class Program { //Win32 Api定义 [DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfeter, string lpszClass, string lpszWindow); [DllImport("user32.dll")] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, String lParam); [DllImport("user32.dll")] static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); //Win32消息定义 const uint WM_SETTEXT = 0x000c; const uint WM_IME_KEYDOWN = 0x0290; const uint WM_LBUTTONDOWN = 0x0201; const uint WM_LBUTTONUP = 0x0202; static void Main(string[] args) { PrintDocument pd = new PrintDocument(); pd.PrinterSettings.PrinterName = "Microsoft XPS Document Writer"; pd.PrintController = new StandardPrintController(); pd.BeginPrint += Pd_BeginPrint; pd.PrintPage += Pd_PrintPage; pd.EndPrint += Pd_EndPrint; Action printTask = () => { System.Threading.Thread t = new System.Threading.Thread(() => { while (true) { IntPtr hWnd = FindWindow("#32770", "将打印输出另存为"); if (hWnd != IntPtr.Zero) { IntPtr hChild; // 由于输入框被多个控件嵌套,因此需要一级一级的往控件内找到输入框 hChild = FindWindowEx(hWnd, IntPtr.Zero, "DUIViewWndClassName", String.Empty); hChild = FindWindowEx(hChild, IntPtr.Zero, "DirectUIHWND", String.Empty); hChild = FindWindowEx(hChild, IntPtr.Zero, "FloatNotifySink", String.Empty); hChild = FindWindowEx(hChild, IntPtr.Zero, "ComboBox", String.Empty); hChild = FindWindowEx(hChild, IntPtr.Zero, "Edit", String.Empty); SendMessage(hChild, WM_SETTEXT, IntPtr.Zero, AppDomain.CurrentDomain.BaseDirectory + Guid.NewGuid().ToString().Replace("-", "") + ".xps"); System.Threading.Thread.Sleep(100); // 找到对话框内的保存按钮 hChild = IntPtr.Zero; hChild = FindWindowEx(hWnd, IntPtr.Zero, "Button", "保存(&S)"); // 向保存按钮发送2个消息,以模拟click消息,借此来按下保存按钮 PostMessage(hChild, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero); PostMessage(hChild, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero); } System.Threading.Thread.Sleep(100); } }); t.Start(); int index = 0; while (index < 10) { pd.Print(); LocalPrintServer prtSrv = new LocalPrintServer(); PrintQueue queue = prtSrv.GetPrintQueue("Microsoft XPS Document Writer"); do { System.Threading.Thread.Sleep(1000); queue.Refresh(); } while (queue.NumberOfJobs > 0); Console.WriteLine(DateTime.Now +string.Format( "任务{0}打印完成。",index)); index++; } }; printTask.BeginInvoke(null, null); Console.ReadLine(); } private static void Pd_EndPrint(object sender, PrintEventArgs e) { Console.WriteLine(DateTime.Now + e.PrintAction.ToString()+"!"); } private static void Pd_PrintPage(object sender, PrintPageEventArgs e) { var g = e.Graphics; g.DrawString("Just A Print Test." + Environment.NewLine + Guid.NewGuid().ToString().Replace("-", ""),new System.Drawing.Font("微软雅黑", 12F), new SolidBrush(Color.Black), new Point(2, 2)); } private static void Pd_BeginPrint(object sender, PrintEventArgs e) { Console.WriteLine(DateTime.Now + e.PrintAction.ToString() + "!"); } } }
Microsoft XPS Document 打印时怎样去掉那个“将打印输出另存为”对话框
消息处理模拟点击