2017-01-20 152 views
2

我正在研究一種抓取屏幕截圖的解決方案,並定期將其以圖像的形式保存。此應用程序內置於Windows窗體中。如何在Windows Form應用程序中獲取監視器的屏幕大小以捕獲屏幕截圖?

我用下面的代碼來獲取屏幕分辨率 - :

int h = Screen.PrimaryScreen.WorkingArea.Height; 
int w = Screen.PrimaryScreen.WorkingArea.Width; 

這工作正常,與1366×768分辨率的筆記本電腦。

但是,當在一個非常大的顯示器上執行相同的應用程序時,圖像會從右側和底側斷開。

有沒有辦法處理代碼中的監視器大小。

+0

[「的工作區域是顯示器的桌面面積,不包括任務欄,停靠窗口,並停靠工具欄。」 ](https://msdn.microsoft.com/en-us/library/system.windows.forms.screen.workingarea)。可以使用['Screen.Bounds'](https://msdn.microsoft.com/en-us/library/system.windows.forms.screen.bounds)來獲取整個屏幕 – Slai

回答

1

假設您想要捕獲包含表單的屏幕,請使用Screen.FromControl method,將表單實例傳遞給它,然後使用該屏幕的WorkingArea。

如果這種假設是錯誤的,請在您的問題中添加更多細節。

0

此代碼多個屏幕...它我用什麼...

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Windows.Forms; 
using System.IO; 

namespace JeremyThompsonLabs 
{ 
    public class Screenshot 
    { 
     public static string TakeScreenshotReturnFilePath() 
     { 
      int screenLeft = SystemInformation.VirtualScreen.Left; 
      int screenTop = SystemInformation.VirtualScreen.Top; 
      int screenWidth = SystemInformation.VirtualScreen.Width; 
      int screenHeight = SystemInformation.VirtualScreen.Height; 

      // Create a bitmap of the appropriate size to receive the screenshot. 
      using (Bitmap bitmap = new Bitmap(screenWidth, screenHeight)) 
      { 
       // Draw the screenshot into our bitmap. 
       using (Graphics g = Graphics.FromImage(bitmap)) 
       { 
        g.CopyFromScreen(screenLeft, screenTop, 0, 0, bitmap.Size); 
       } 

       var uniqueFileName = Path.Combine(System.IO.Path.GetTempPath(), Path.GetRandomFileName().Replace(".", string.Empty) + ".jpeg"); 
       try 
       { 
        bitmap.Save(uniqueFileName, ImageFormat.Jpeg); 
       } 
       catch (Exception ex) 
       { 
        return string.Empty; 
       } 
       return uniqueFileName; 
      } 
     } 

    } 
}