2013-10-19 52 views
0

我有我的Visual Basic.net代碼幫着需要在我的Visual Basic程序

我提出「那種」一個孩子的監控軟件,能夠記錄擊鍵,並採取屏幕截圖的一個問題,但我有不知道如何創建一個新的.bmp文件,當它已經存在。

Try 
     'the working area excludes all docked toolbars like taskbar, etc. 
     Dim currentScreen = Screen.FromHandle(Me.Handle).WorkingArea 

     'create a bitmap of the working area 
     Using bmp As New Bitmap(currentScreen.Width, currentScreen.Height) 

      'copy the screen to the image 
      Using g = Graphics.FromImage(bmp) 
       g.CopyFromScreen(New Point(0, 0), New Point(0, 0), currentScreen.Size) 
      End Using 

      'save the image 
      'look for the file 
      If IO.File.Exists(save1.Text) Then 
       'if exsist then add (2) to the filename 
       bmp.Save(Save1.text + "(2)" + ".bmp") 
       'done 
      End If 
      bmp.Save(Save1.Text) 

     End Using 
    Catch ex As Exception 
    End Try 


End Sub 

正如你所看到的程序檢查bmp文件是否已經存在,如果它確實會產生新的bmp文件。例如:如果文件(whatever.bmp)存在,則它不會覆蓋它,而是在文件名exmp :(無論(2).bmp)中添加「(2)」。所以問題是,我不想爲這個函數生成幾十行代碼,我正在尋找一種自動的方式來添加(2),(3),(4)或其他什麼如果它已經存在以防止覆蓋,則爲filename。

對不起我的英文不好:d

-Matt

+0

代碼的完整性只是一個建議,修改這些 「+」 爲 「&」。 – ElektroStudios

回答

0

首先在類聲明中初始化其中的圖片索引將被存儲在一個變量:

Private picIndex As Long = 0 

那麼你可以使用Threading.Interlocked.Increment增加可變數字:

bmp.Save(String.Format("{0} {1}.bmp", _ 
         Save1.text, _ 
         Threading.Interlocked.Increment(picIndex))) 

如果你想編寫一個通用的程序,那麼你會考慮到變量裏面添加爲Static

Public shared Sub MakeScreenshot(...) 
    ... 
    Static picIndex As Long = 0 
    ... 
End Sub 
+0

如果程序重新啓動會發生什麼? :) – VladL

+0

@ V L我沒有得到你想要的,如果應用程序重新啓動會發生什麼? – ElektroStudios

+0

我的意思是,如果你重新啓動你的應用程序,計數器將爲0 – VladL

0

舉一個簡單的解決方案,你可以增加數,並檢查文件是否存在。如果沒有 - 保存。

For i As Integer = 0 To Int32.MaxValue - 1 
    Dim name As String = Save1.text + "(" + i + ").bmp" 
    If Not File.Exists(name) Then 
     bmp.Save(name) 
      Exit For 
    End If 
Next 
0
Dim counter as integer 
counter = My.Computer.FileSystem.GetFiles("your image folder path") 
bmp.Save(Save1.text & "(" & counter & ")" & ".bmp")