How to save Bitmap from ActiveX component

0

Try to save screen of AxMsTscAxNotSafeForScripting (Microsoft Terminal Services Client Control), but cant find any information about it...

I try one code, but it screen only field of element... https://i.imgur.com/fo6jKDT.png

    [Flags]
    private enum DrawingOptions
    {
        PRF_CHECKVISIBLE = 0x00000001,
        PRF_NONCLIENT = 0x00000002,
        PRF_CLIENT = 0x00000004,
        PRF_ERASEBKGND = 0x00000008,
        PRF_CHILDREN = 0x00000010,
        PRF_OWNED = 0x00000020
    }

    private const uint WM_PAINT = 0xF;


    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr dc, DrawingOptions opts);

    var bm = new Bitmap(rdp.Width, rdp.Height, rdp.CreateGraphics());

        using (Graphics g = Graphics.FromImage(bm))
        {
            IntPtr dc = g.GetHdc();
            try
            {
                SendMessage(rdp.Handle, WM_PAINT, dc,
                DrawingOptions.PRF_CLIENT |
                DrawingOptions.PRF_NONCLIENT |
                DrawingOptions.PRF_CHILDREN);
            }
            finally
            {
                g.ReleaseHdc();
            }
        }
        pictureBox1.Image = bm;
c#
bitmap
activex
asked on Stack Overflow Aug 29, 2019 by Jeremens

1 Answer

0

This code helped to save the form image and displays ActiveX perfectly. Since the item is static, I'll just crop the image and get the screenshot I want.

 [DllImport("user32.dll")]
 public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
 [DllImport("user32.dll")]
 public static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags);

 public static Bitmap PrintWindow(IntPtr hwnd)    
 {       
      RECT rc;        
      GetWindowRect(hwnd, out rc);

      Bitmap bmp = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb);        
      Graphics gfxBmp = Graphics.FromImage(bmp);        
      IntPtr hdcBitmap = gfxBmp.GetHdc();        

      PrintWindow(hwnd, hdcBitmap, 0);  

      gfxBmp.ReleaseHdc(hdcBitmap);               
      gfxBmp.Dispose(); 

      return bmp;   
 }
answered on Stack Overflow Aug 29, 2019 by Jeremens

User contributions licensed under CC BY-SA 3.0