zoukankan      html  css  js  c++  java
  • 消息处理模拟点击

    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() + "!");
    
            }
    
        }
    
    }
    View Code

    Microsoft XPS Document 打印时怎样去掉那个“将打印输出另存为”对话框

    消息处理模拟点击

  • 相关阅读:
    lua -- handler
    class() 高级用法 -- lua
    聊聊javascript的null和undefined
    在vue-cli搭建的项目中增加后台mock接口
    vue-cli+webpack在生成的项目中使用bootstrap方法(二)
    vue-cli+webpack在生成的项目中使用bootstrap方法(一)
    Node.js项目APM监控之New Relic
    让sublime text3支持Vue语法高亮显示
    在javascript中获取一个对象内属性的个数
    debian8.5安装sublime text3
  • 原文地址:https://www.cnblogs.com/xiangxiong/p/7661420.html
Copyright © 2011-2022 走看看