2014-06-08 104 views
0

我的目標是能夠製作一個窗口的位圖,並且只是該窗口。我還需要能夠在該窗口內製作特定像素區域的位圖。這些地區不是窗體或類似的東西。如何在C#中創建一個窗口的位圖?

我想通過窗口句柄製作一個屏幕,然後將需要寫入位圖的屏幕區域寫入這個問題是一個很好的解決方案。

這是我做過什麼:

Process[] processlist = Process.GetProcesses(); 
     String[] process = null; 
     process = new string[200]; 
     int i = 0; 
     IntPtr handle = IntPtr.Zero; 
     foreach (Process theprocess in processlist) 
     { 
      process[i] = theprocess.MainWindowTitle; 
      if (process[i].Contains("Title of Process")) 
      { 
       handle = theprocess.MainWindowHandle; 
       MessageBox.Show("Handle Set"); 

       break; 
      } 
      i++; 

     } 

     //Sets new screen from Handle 

     Screen thescreen = Screen.FromHandle(handle); 

     //Bitmap stored 
     Bitmap bmpScreenshot = new Bitmap(thescreen.Bounds.Width, thescreen.Bounds.Height); 

     //Graphics object to draw screen in bitmap 
     Graphics g = Graphics.FromImage(bmpScreenshot); 

     //Copy from screen to bitmap 
     g.CopyFromScreen(0, 0, 0, 0, thescreen.Bounds.Size); 

然而,這只是獲取整個屏幕的位圖。我怎樣才能減少到只有一個窗口的大小?

謝謝。

+0

你必須[PInvoke的GetWindowRect()](http://pinvoke.net/default.aspx/ user32/GetWindowRect.html)來獲取窗口的位置和大小。 –

回答

0

你可以這樣做:

Bitmap bmpScreenshot = new Bitmap(this.Bounds.Width, this.Bounds.Height); 
DrawToBitmap(bmpScreenshot, this.DisplayRectangle); 
pictureBox1.Image = bmpScreenshot; 

我想上面的代碼和它工作得很好

+0

我用我想捕獲的窗口的句柄替換「this」嗎? –

+0

是的,它會顯示窗體的整個區域,除了邊框。 –

+0

當我用窗口的句柄替換這個時,我想截圖: 'System.IntPtr'不包含'Bounds'的定義,也沒有包含接受類型'System.IntPtr'的第一個參數的擴展方法'Bounds'可以找到(您是否缺少使用指令或程序集引用?' 我想要捕獲的窗口不是程序運行的窗口。 –

相關問題