2015-02-24 94 views
0

我有一个在WPF和WinForms.I中创建的应用程序A在WinForms中为捕捉屏幕编写了另一个应用程序。我面临的问题是,应用程序A中出现的对话框没有捕获到屏幕中。整个屏幕被捕获,包括对话框后面的区域,但对话框不会被捕获。屏幕捕捉不捕获我的应用程序中的对话框

public void CaptureScreen(string filepath) 
    { 

     string[] words = filepath.Split('\\'); 
     string newFilePath = " "; 
     foreach (string word in words) 
     { 
      if (!(word.Contains(".bmp"))) 
      { 
       newFilePath = newFilePath + word + "//"; 
      } 
      else 
      { 
       newFilePath = newFilePath + word; 
      } 


     } 

     this.WindowState = FormWindowState.Minimized; 


     Screen[] screens; 
     screens = Screen.AllScreens; 
     int noofscreens = screens.Length, maxwidth = 0, maxheight = 0; 
     for (int i = 0; i < noofscreens; i++) 
     { 
      if (maxwidth < (screens[i].Bounds.X + screens[i].Bounds.Width)) maxwidth = screens[i].Bounds.X + screens[i].Bounds.Width; 
      if (maxheight < (screens[i].Bounds.Y + screens[i].Bounds.Height)) maxheight = screens[i].Bounds.Y + screens[i].Bounds.Height; 
     } 


     var width = maxwidth; 
     var height = maxheight; 

     Point sourcePoint = Point.Empty; 
     Point destinationPoint = Point.Empty; 

     Rectangle rect = new Rectangle(0, 0, width, height); 

     Bitmap bitmap = new Bitmap(rect.Width, rect.Height); 

     Graphics g = Graphics.FromImage(bitmap); 

     // g.CopyFromScreen(sourcePoint, destinationPoint, rect.Size); 

     g.CopyFromScreen(new Point(rect.Left, rect.Top), Point.Empty, rect.Size); 

     bitmap.Save(filepath, ImageFormat.Bmp); 


     //Console.WriteLine("(width, height) = ({0}, {1})", maxx - minx, maxy - miny); 


    } 


} 

}

+0

你的代码在哪里捕捉屏幕区域? – 2015-02-24 05:02:05

+0

与论坛网站不同,我们不使用“谢谢”或“任何帮助表示赞赏”,或在[so]上签名。请参阅“[应该'嗨','谢谢',标语和致敬从帖子中删除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts)。 – 2015-02-24 05:03:22

+0

它与前景和背景窗口有关吗? – 2015-02-24 05:29:44

回答

0
Bitmap bmpScreenshot = new Bitmap(Screen.AllScreens[1].Bounds.Width, Screen.AllScreens[1].Bounds.Height, PixelFormat.Format32bppArgb); 

      Graphics.FromImage(bmpScreenshot).CopyFromScreen(
             Screen.AllScreens[1].Bounds.X, 
             Screen.AllScreens[1].Bounds.Y, 
             0, 
             0, 
             Screen.AllScreens[1].Bounds.Size, 
             CopyPixelOperation.SourceCopy); 

      this.picExtendedModitorScreen.Image = bmpScreenshot; 
      this.picExtendedModitorScreen.Refresh(); 

放入计时器滴答事件的代码。

我已经把代码中的扩展屏幕1,您可以将其更改为任何其他。