
dttah (Normal User)
Rookie
    
Messaggi: 26
Iscritto: 30/01/2007
|
Ho un programma che scatta screenshot a ripetizione. E ho fatto in modo che li rinomini in maniera random (asdi42123.jpg e simili) . Però vorrei che invece seguissero un ordine logico (1.jpg , 2.jpg , 3.jpg). Ovvero
If file.exist(path)
File.rename
il problema e che se esiste anche il secondo deve fare di nuovo la stessa cosa allora ho pensato ad un do loop solo che mi sto incasinando...
Dim lol As String = My.Computer.FileSystem.SpecialDirectories.MyPictures
Dim s As String = DateTime.Today.ToString("dd-MM-yyy")
Dim num1 As String
Dim ext As String = ".jpg"
Dim path As String = My.Computer.FileSystem.SpecialDirectories.MyPictures + "\autoscr\" + s
aiutatemi O_O
Ultima modifica effettuata da dttah il 25/07/2008 alle 14:38 |
|

pcprogrammer (Ex-Member)
Rookie
    
Messaggi: 30
Iscritto: 04/06/2008
|
io sono programmatrice (femmina) di C#, ma me la cavicchio anche in VB.NET, guarda se questo codice aggiunto al tuo può aiutarti:
Dim numeroFoto As Integer = 0
While File.Exist(path) = False
numeroFoto += 1
End While
se non dovesse funzionare o per dei chiarimenti mi trovi a questo indirizzo MSN:
pcprogrammer@hotmail.it
Ciao Ciao
|
|

dttah (Normal User)
Rookie
    
Messaggi: 26
Iscritto: 30/01/2007
|
Facendo in questo modo ( aggiungendo il codice che hai detto tu) mi si blocca il programma non so xkè non mi da manco l'eccezione.
Codice sorgente - presumibilmente VB.NET |
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim lol As String lol = My.Computer.FileSystem.SpecialDirectories.MyPictures Dim s As String = DateTime.Today.ToString("dd-MM-yyy") Me.Opacity = 0 Dim bounds As Rectangle Dim screenshot As Bitmap Dim graph As Graphics bounds = PictureBox1.Bounds screenshot = New Bitmap(bounds.Width, bounds.Height, Imaging.PixelFormat.Format32bppArgb) graph = Graphics.FromImage(screenshot) graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy) Dim numeroFoto As Integer = 0 Dim path As String = My.Computer.FileSystem.SpecialDirectories.MyPictures + "\autoscr\" + s While File. Exists(path ) = False numeroFoto += 1 End While screenshot.Save(lol & "\autoscr\" & s & "\" & numeroFoto & ".jpg") End Sub
|
Il totem tu sei un pro aiutami T_T
Ultima modifica effettuata da dttah il 25/07/2008 alle 20:41 |
|

pcprogrammer (Ex-Member)
Rookie
    
Messaggi: 30
Iscritto: 04/06/2008
|
non funziona perchè ti sei sbagliato, il mio codice non dovevi metterlo lì.
Contattami per msn: pcprogrammer@hotmail.it
se ci sentiamo ti metto a posto tutto io
|
|

dttah (Normal User)
Rookie
    
Messaggi: 26
Iscritto: 30/01/2007
|
ti ho aggiunto sono
andreas_n .. ecc ecc
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Codice sorgente - presumibilmente VB.NET |
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim lol As String lol = My.Computer.FileSystem.SpecialDirectories.MyPictures Dim s As String = DateTime.Today.ToString("dd-MM-yyy") Me.Opacity = 0 Dim bounds As Rectangle Dim screenshot As Bitmap Dim graph As Graphics bounds = PictureBox1.Bounds screenshot = New Bitmap(bounds.Width, bounds.Height, Imaging.PixelFormat.Format32bppArgb) graph = Graphics.FromImage(screenshot) graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy) Static numeroFoto As Integer = 0 Dim path As String = lol + "\autoscr\" + s + "\" Do numeroFoto += 1 Loop While File. Exists(path & "\" & numeroFoto & ".jpg") screenshot.Save(path & "\" & numeroFoto & ".jpg") End Sub
|
Questo codice dovrebbe andare. Anche quello di pcprogrammer era sbagliato. Infatti, tu vuoi dare un ordine alle foto che vengono generate, quindi devi incrementare numeroFoto ad ogni screenshot: questo si può fare con una variabile static, che mantiene il proprio valore tra un tick e l'altro. Con il ciclo Do, l'indice viene aumentato di 1 per proseguire nell'ordine, ma se il file con quel numero esiste, allora prosegue nell'aumentare finché non trova un numero non ancora occupato, e lo salva.
Il codice di pcprogrammer, invece, aumentava l'indice solo se il file NON esisteva. Quindi se il file fosse esistito, l'avrebbe sovrascritto. Inoltre, poichè numeroFoto non era dichiarata Static il procedimento veniva ripetuto ad ogni tick, col risultato che tutti gli screenshot sovrascrivevano il primo.
P.S.: File.Exists deve essere usato su file, e non su percorsi, quindi File.Exists(path) non è un uso valido.
P.P.S.: hai controllato che la cartella path esista prima di procedere?
Ultima modifica effettuata da Il Totem il 26/07/2008 alle 11:11 |
|

dttah (Normal User)
Rookie
    
Messaggi: 26
Iscritto: 30/01/2007
|
Totem sei un genio grazie dell'aiuto , avevo intuito che dovevo utilizzare un do loop ma non sapevo bene come strutturare il tutto. Senti un ultima cosa. Io avevo una combobox con dei numeri in millisecondi "10000" e volevo che praticamente il timer dipendesse dalla combobox (timer1.inteval).
Ho provato timer1.inteval = combobox.items ma mi dice questo:
Codice sorgente - presumibilmente C# / VB.NET |
Errore 1 Impossibile convertire il valore di tipo "System.Windows.Forms.ComboBox.ObjectCollection" in "Integer". C:\Documents and Settings\Andrea\Documenti\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Form1.vb 44 27 WindowsApplication1
|
Mentre se provo a fare combobox1.text mi legge il testo che gli attribuisco da visual studio se lo cambio manualmente rimane ugualmente quel testo. Grazie di tutto
Ultima modifica effettuata da dttah il 26/07/2008 alle 13:24 |
|

Mte90 (Member)
Guru
    
Messaggi: 1144
Iscritto: 25/03/2008
|
l'items non è in formato string.
devi scrivere combox.items.tostring e se dà problemi eguagliare questo codice ad una varibabile integer.
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Items è una collezione: non può essere convertita in stringa. SelectedItem fornisce, invece, il valore dell'elemento selezionato:
Codice sorgente - presumibilmente Plain Text |
Timer1.Interval = ComboBox.SelectedItem.ToString
|
Ricordati di controllare se è selezionato qualcosa, prima.
|
|