예제 #1
0
 public static void RestoreHighLight(Win32API.Rect rect, IntPtr handle)
 {
     Win32API.Rect invalidRect = new Win32API.Rect();
     invalidRect.left   = rect.left - Hight_Border;
     invalidRect.top    = rect.top - Hight_Border;
     invalidRect.right  = rect.right + Hight_Border;
     invalidRect.bottom = rect.bottom + Hight_Border;
     //refresh the window
     Win32API.InvalidateRect(handle, ref invalidRect, 1);
     //Win32API.UpdateWindow(handle);
 }
예제 #2
0
        public static void HighlightScreenRect(int left, int top, int width, int height, int mseconds)
        {
            IntPtr handle = Win32API.WindowFromPoint(left + width / 2, top + height / 2);

            Win32API.Rect windRect = new Win32API.Rect();
            Win32API.GetWindowRect(handle, ref windRect);

            left -= windRect.left;
            top  -= windRect.top;
            HighlightWindowRect(handle, left, top, width, height, mseconds);
        }
예제 #3
0
        public static void RestoreHighLight(int left, int top, int width, int height, IntPtr handle)
        {
            if (handle == IntPtr.Zero)
            {
                handle = Win32API.WindowFromPoint(left + width / 2, top + height / 2);
            }

            Win32API.Rect rect = new Win32API.Rect();
            rect.left   = left;
            rect.top    = top;
            rect.right  = left + width;
            rect.bottom = top + height;

            RestoreHighLight(rect, handle);
        }
예제 #4
0
        public System.Drawing.Rectangle GetRectOnScreen()
        {
            try
            {
                Win32API.Rect rect = new Win32API.Rect();
                Win32API.GetWindowRect(this.Handle, ref rect);

                this._left   = rect.left;
                this._top    = rect.top;
                this._width  = rect.Width;
                this._height = rect.Height;

                return(new System.Drawing.Rectangle(_left, _top, _width, _height));
            }
            catch (Exception ex)
            {
                throw new CannotGetAppInfoException("Can not get size of test app: " + ex.ToString());
            }
        }
예제 #5
0
        /* Image CaptureWindow(IntPtr handle)
         * return an image of expected handle.
         */
        public static Image CaptureWindow(IntPtr handle)
        {
            try
            {
                if (handle == IntPtr.Zero)
                {
                    throw new Exception("Handle can not be 0.");
                }

                // get the size
                Win32API.Rect windowRect = new Win32API.Rect();
                Win32API.GetWindowRect(handle, ref windowRect);
                int width  = windowRect.right - windowRect.left;
                int height = windowRect.bottom - windowRect.top;

                if (width > 0 && height > 0)
                {
                    bool printed = false;

                    //firstly, try PrintWindow to get the image of the window.
                    Bitmap bm = new Bitmap(width, height);
                    using (Graphics g = Graphics.FromImage(bm))
                    {
                        System.IntPtr bmDC = g.GetHdc();
                        printed = Win32API.PrintWindow(handle, bmDC, 0);
                        g.ReleaseHdc(bmDC);
                    }

                    if (printed)
                    {
                        return(bm);
                    }
                    else
                    {
                        //not printed, try other way.

                        // get te hDC of the target window
                        IntPtr hdcSrc = Win32API.GetWindowDC(handle);

                        // create a device context we can copy to
                        IntPtr hdcDest = Win32API.CreateCompatibleDC(hdcSrc);
                        // create a bitmap we can copy it to,
                        IntPtr hBitmap = Win32API.CreateCompatibleBitmap(hdcSrc, width, height);
                        // select the bitmap object
                        IntPtr hOld = Win32API.SelectObject(hdcDest, hBitmap);
                        // bitblt over
                        Win32API.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, Win32API.SRCCOPY);
                        // restore selection
                        Win32API.SelectObject(hdcDest, hOld);
                        // clean up
                        Win32API.DeleteDC(hdcDest);
                        Win32API.ReleaseDC(handle, hdcSrc);

                        // get a .NET image object for it
                        Image img = Image.FromHbitmap(hBitmap);
                        // free up the Bitmap object
                        Win32API.DeleteObject(hBitmap);

                        return(img);
                    }
                }
                else
                {
                    throw new Exception("Can not get size infomation of the window.");
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }