2016-10-01 6 views
0

私はC#で作成したシンプルなWebブラウザからスクリーンショットを撮ろうとしています。 は、ここでは通常のWebページの場合、これは完璧に動作し、私はこれまでスクリーンショットFlash Playerコンテンツ

public class NativeMethods 
{ 
    [ComImport] 
    [Guid("0000010D-0000-0000-C000-000000000046")] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    interface IViewObject 
    { 
     void Draw([MarshalAs(UnmanagedType.U4)] uint dwAspect, int lindex, IntPtr pvAspect, [In] IntPtr ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, [MarshalAs(UnmanagedType.Struct)] ref RECT lprcBounds, [In] IntPtr lprcWBounds, IntPtr pfnContinue, [MarshalAs(UnmanagedType.U4)] uint dwContinue); 
    } 

    [StructLayout(LayoutKind.Sequential, Pack = 4)] 
    struct RECT 
    { 
     public int Left; 
     public int Top; 
     public int Right; 
     public int Bottom; 
    } 

    public static void GetImage(object obj, Image destination, Color backgroundColor) 
    { 
     using (Graphics graphics = Graphics.FromImage(destination)) 
     { 
      IntPtr deviceContextHandle = IntPtr.Zero; 
      RECT rectangle = new RECT(); 

      rectangle.Right = destination.Width; 
      rectangle.Bottom = destination.Height; 

      graphics.Clear(backgroundColor); 

      try 
      { 
       deviceContextHandle = graphics.GetHdc(); 

       IViewObject viewObject = obj as IViewObject; 
       viewObject.Draw(1, -1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, deviceContextHandle, ref rectangle, IntPtr.Zero, IntPtr.Zero, 0); 
      } 
      finally 
      { 
       if (deviceContextHandle != IntPtr.Zero) 
       { 
        graphics.ReleaseHdc(deviceContextHandle); 
       } 
      } 
     } 
    } 
} 

まあを見つけてきたものだが、フラッシュプレーヤーがコンテンツをロードするとき、私は空白の黒画像を取得します。私がしたいことは、たとえブラウザがプログラム的に最小化されていても、フラッシュコンテンツからスクリーンショットを撮ることができるようにすることです。

このコードをどうにかする方法はありますか?フラッシュプレーヤーのキャッシュにアクセスしてイメージをそこからエクスポートする方法はありますか?

答えて

1

は、スクリーンショットを撮る別の方法を見つけました。フラッシュコンテンツが表示されている間、十分に頑強です。

Screen shot from any control in C#

関連する問題