2012-01-13 79 views
2

我寫了一些代碼,我正在做一個程序截圖,當程序最小化。事情是有問題的代碼,我不知道它是什麼。每當我截圖時,該程序都會將該應用程序的圖片添加到最小化,而不是最小化。截圖程序最小化

因此,我需要做的是儘量減少應用程序,然後截取屏幕截圖,然後在截取屏幕截圖後重新打開程序。

對不起Noob的問題,但我是全新的VB和只編碼它在一天少。

Dim screenImage As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height) 
    Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenImage) 
    g.CopyFromScreen(New Point(0, 0), New Point(0, 0), New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)) 


    Me.Hide() 
    screenImage.Save("C:\screenImage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 
    Dim tSpan As TimeSpan = TimeSpan.FromSeconds(System.DateTime.Now.Second) 
    Dim tSpan2 As TimeSpan = TimeSpan.FromSeconds(System.DateTime.Now.Second) 
    Do While Math.Abs(tSpan.Subtract(tSpan2).Seconds) < 2 
     tSpan2 = TimeSpan.FromSeconds(System.DateTime.Now.Second) 

    Loop 
    Me.Show() 

任何幫助將是偉大的。

+0

形式的不透明度屬性設置爲99,並刪除隱藏()調用。這實際上是一個bug :) – 2012-01-13 23:01:30

回答

3

要調用Hide後,你採取的截圖:)

試試這個:

Dim screenImage As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height) 
Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenImage) 

Me.Hide() 
Me.Application.DoEvents() ' <-- might not be necessary; try without it first. 

g.CopyFromScreen(New Point(0, 0), New Point(0, 0), New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)) 

screenImage.Save("C:\screenImage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 
Dim tSpan As TimeSpan = TimeSpan.FromSeconds(System.DateTime.Now.Second) 
Dim tSpan2 As TimeSpan = TimeSpan.FromSeconds(System.DateTime.Now.Second) 
Do While Math.Abs(tSpan.Subtract(tSpan2).Seconds) < 2 
    tSpan2 = TimeSpan.FromSeconds(System.DateTime.Now.Second) 

Loop 
Me.Show() 
+0

是的,它仍然顯示在屏幕截圖中的應用程序。 :( – Alex 2012-01-13 20:56:11

+0

@亞歷克編輯我的答案 – 2012-01-13 21:02:28

+0

你真棒!非常感謝你!!!!!!!!!!!!!!!!!!!!!!!!! – Alex 2012-01-13 21:04:37

0

嘗試把代碼後,你下面Me.Hide()

Application.DoEvents() 
System.Threading.Thread.Sleep(100) 

睡眠100應該足夠,但如果窗口仍然部分存在,請嘗試添加更多時間。

編輯:

看着你的代碼,我不知道你試圖把在等待。 Thread.Sleep將會等待你。只需要以毫秒爲單位的時間。

選項2:

使用BackgroundWorker採取截圖。只需在啓動後臺工作者之前放置Me.Hide,在DoWork中捕獲屏幕並在RunWorkerCompleted中執行Me.Show。另外,在屏幕截圖之前,請在DoWork內部輸入System.Threading.Thread.Sleep(100)

+0

這個程序還在畫面中。 – Alex 2012-01-13 20:57:02

+0

程序啓動時,程序似乎正在拍攝圖片,而不是最小化時。 – Alex 2012-01-13 20:57:57

+0

另一種選擇是將屏幕捕獲放入後臺工作人員內部。將它放在不同的線程中將允許窗口消失。 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx – norlando 2012-01-13 20:59:47

0

我試過這個,當點擊一個按鈕。屏幕截圖進入一個名爲picDisplay的圖片框。

Me.Hide() 
    Dim bounds As Rectangle 
    Dim screenshot As System.Drawing.Bitmap 
    Dim graph As Graphics 
    bounds = Screen.PrimaryScreen.Bounds 
    screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb) 
    graph = Graphics.FromImage(screenshot) 
    graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy) 
    picDisplay.Image = screenshot 
    Me.Show() 
    'this takes a screenshot 

,然後單擊此按鈕,將其保存:

Dim savefiledialog1 As New SaveFileDialog 
    savefiledialog1.Title = "Save File" 
    savefiledialog1.FileName = "*.bmp" 
    savefiledialog1.Filter = "Bitmap |*.bmp" 
    If savefiledialog1.ShowDialog() = DialogResult.OK Then 
     picDisplay.Image.Save(savefiledialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp) 
    End If 
    'and this saves the screenshot