c#截MSN聊天窗口

来源:互联网 发布:mac apple store打不开 编辑:程序博客网 时间:2024/05/01 10:49

        [DllImport("user32.dll", EntryPoint = "GetWindowPlacement")]
        public static extern int GetWindowPlacement(int hwnd,ref WINDOWPLACEMENT lpwndpl);

        public struct POINTAPI
        {
            public int x;
            public int y;
        }

        public struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }    

        [StructLayout(LayoutKind.Sequential)]
        public struct WINDOWPLACEMENT
        {
            public int Length;
            public int flags;
            public int showCmd;
            public POINTAPI ptMinPosition;
            public POINTAPI ptMaxPosition;
            public RECT rcNormalPosition;
        }

        [DllImport("kernel32.dll", EntryPoint = "GetCurrentProcess")]
        public static extern int GetCurrentProcess();
        [DllImport("user32.dll")]
        public static extern int FindWindow(string classname, string windowname);
        [DllImport("user32.dll")]
        static extern int GetWindowText(int handle, StringBuilder text, int MaxLen);  
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern int GetActiveWindow();
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern int GetForegroundWindow();


        public void meitest()
        {
            while (true)
            {
                int hproc = 0;
                // hproc = FindWindow(null, "Windows Live Messenger");
                //hproc = GetActiveWindow();
                // hproc = (int)User32API.GetCurrentWindowHandle();
                 hproc = GetForegroundWindow();
                //MessageBox.Show(hproc.ToString());
                 StringBuilder textWindow = new StringBuilder(100);
                 int i = GetWindowText(hproc, textWindow, 100);
                 if (textWindow.ToString().IndexOf("<") + textWindow.ToString().IndexOf(">") > 0)
                 {
                     WINDOWPLACEMENT _myWINDOWPLACEMENT = new WINDOWPLACEMENT();
                     GetWindowPlacement(hproc, ref _myWINDOWPLACEMENT);
                     if (_myWINDOWPLACEMENT.rcNormalPosition.right + _myWINDOWPLACEMENT.rcNormalPosition.bottom != 0)
                     {
                         capture(_myWINDOWPLACEMENT.rcNormalPosition.left, _myWINDOWPLACEMENT.rcNormalPosition.top,
                             _myWINDOWPLACEMENT.rcNormalPosition.right - _myWINDOWPLACEMENT.rcNormalPosition.left,
                             _myWINDOWPLACEMENT.rcNormalPosition.bottom - _myWINDOWPLACEMENT.rcNormalPosition.top);
                     }
                 }
                System.Threading.Thread.Sleep(3000);
            }
        }

 

        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
        private static extern bool BitBlt(
        IntPtr hdcDest,   //目标设备的句柄    
        int nXDest,   //   目标对象的左上角的X坐标    
        int nYDest,   //   目标对象的左上角的X坐标    
        int nWidth,   //   目标对象的矩形的宽度    
        int nHeight,   //   目标对象的矩形的长度    
        IntPtr hdcSrc,   //   源设备的句柄    
        int nXSrc,   //   源对象的左上角的X坐标    
        int nYSrc,   //   源对象的左上角的X坐标    
        System.Int32 dwRop   //   光栅的操作值    
        );
        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
        private static extern IntPtr CreateDC(
        string lpszDriver,   //   驱动名称    
        string lpszDevice,   //   设备名称    
        string lpszOutput,   //   无用,可以设定位"NULL"    
        IntPtr lpInitData   //   任意的打印机数据    
        );
        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
        private static extern bool DeleteDC(
        IntPtr hdc
        );

        public void capture(int startX, int startY, int with, int high)
        {
            try
            {
                IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
                //创建显示器的DC    
                Graphics g1 = Graphics.FromHdc(dc1);
                //由一个指定设备的句柄创建一个新的Graphics对象    
                MyImage = new Bitmap(with, high, g1);
                //根据屏幕大小创建一个与之相同大小的Bitmap对象    
                Graphics g2 = Graphics.FromImage(MyImage);
                //获得屏幕的句柄    
                IntPtr dc3 = g1.GetHdc();
                //获得位图的句柄    
                IntPtr dc2 = g2.GetHdc();
                //把当前屏幕捕获到位图对象中    
                BitBlt(dc2, 0, 0, with, high, dc3,startX, startY , 13369376);
                //把当前屏幕拷贝到位图中    
                g1.ReleaseHdc(dc3);
                //释放屏幕句柄    
                g2.ReleaseHdc(dc2);
                //释放位图句柄    
                string strDt = DateTime.Now.ToString().Replace("/", "-");
                strDt = strDt.Replace(":", "_");
                MyImage.Save( "e://" + strDt + ".jpg", ImageFormat.Jpeg);
                //MessageBox.Show("已经把当前屏幕保存到C://MyJpeg.jpg文件中!");
                MyImage.Dispose();
                g1.Dispose();
                g2.Dispose();
                if (!DeleteDC(dc1))
                {
                    MessageBox.Show("DeleteDC() not successed");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }


        }

原创粉丝点击