2012-04-05 54 views
1

我想捕捉屏幕,但沒有當前的形式,我試圖最小化 - >捕捉 - >最大化,但我正在尋找一個更好的解決方案,如果存在。這是我的代碼::在C#中捕獲屏幕但不是當前窗體?

int w = this.Width; 
    int h = this.Height; 
    Size sz = this.Size; 
    Point loc = this.Location; 

    this.WindowState = FormWindowState.Minimized; 

    System.Threading.Thread.Sleep(500); 

    using (Bitmap b = new Bitmap(w, h)) 
    { 
     using (Graphics g = Graphics.FromImage(b)) 
     { 
      g.CopyFromScreen(loc, new Point(0, 0), sz); 
     } 

     b.Save(Environment.CurrentDirectory + "\\slides\\screen.jpeg"); 

     this.BackgroundImage = System.Drawing.Image.FromFile(@"slides\screen.jpeg"); 
    } 

    this.WindowState = FormWindowState.Maximized; 

我問是否有直接的方式把捕獲的圖像作爲窗體背景,而不保存它。

+0

只需在設計器中將窗體的不透明度設置爲99,您就不必隱藏它。不是功能,這是一個錯誤。 – 2012-04-05 08:33:18

+0

@Hans這是我在Vista上做的並且滿意(不透明度<100),直到我在Win 7上測試;我的表單總是被捕獲(不是我想要的,想要捕獲我的表單下的內容而不隱藏它 - 任何想法? – joedotnot 2012-05-19 14:12:56

+0

沒關係,我已經完成了。故事的道德:在截圖時禁用Aero(Aero =無用功能) – joedotnot 2012-05-19 15:23:05

回答

1

嘗試,雖然我也注意到雙方你和我是微跌形式邊界偏移。

int w = this.Width; 
    int h = this.Height; 
    Size sz = this.Size; 
    Point loc = this.Location; 
    Hide(); 
    System.Threading.Thread.Sleep(500); 
    using (Image b = new Bitmap(w, h)) 
    { using (Graphics g = Graphics.FromImage(b)) 
    { 
     g.CopyFromScreen(loc, new Point(0, 0), sz); } 

     Image x = new Bitmap(b); 
     this.BackgroundImage = x; 
    } 
    Show(); 
+0

謝謝,這有幫助:) – 2012-04-05 09:32:52

+1

你應該記錄爲什麼500是一個特殊的數字。它比314好嗎? – 2012-04-05 12:46:59

+0

我相信他使用500確保充足的時間發生,因爲我沒有嘗試過,並得到了形式,100顯示它變暗.. – BugFinder 2012-04-05 13:00:56

4
  1. 設置形式Opacity爲0

    這將使形式完全透明,並因此不可見。

  2. 使窗體不可見。將Visible屬性設置爲false。

    這會隱藏表單而不改變它的狀態,雖然在XP上這不會讓窗口立即消失。

+0

只需將其設置爲99,這樣就不會隱形:)設置可見爲false實際上不起作用,您仍然可以在XP上看到它。直到所有其他重疊的窗戶都趕上了他們的繪畫。 – 2012-04-05 08:36:30

+0

@HansPassant - 啊,公平點。 – ChrisF 2012-04-05 08:38:07