Olá, eu estou querendo criar uma aplicação basica mesmo, do tipo, a cada X segundos ele tira uma foto da tela, alguem pode me ajudar neste ponto, caso ja tenha algum aqui pronto no laboratorio de script, ou alguns amterias de ajuda?
eu criei assim, porem nao to intendendo como fazer para a cada X segundos tirar foto, porque deste jeito ele tira foto so quando eu clicar no botao e mesmo assim uma foto, apenas
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int i=1;
while (i<20) {
try{
Robot robot = new Robot();
BufferedImage bi = robot.createScreenCapture(new // Captura a tela na àrea definida pelo retângulo
Rectangle(0, 0, 1440, 900)); // aqui vc configura as posições xy e o tam da área que quer capturar
ImageIO.write(bi, "jpg", new File("D://tela.jpg"));// Salva a imagem
} catch(AWTException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
i++;
}
}
vc tem algum exemplo para eu ver, ou me ensinar a como editar neste arquivo, é que meu nivel é basico, estoua te procurando algum exemplo pronto pra facilitar, pq tbm prcisso fazer upload deste arquivo em um ftp, porem agora mesmo é como fazer isso
eu tbm sou iniciante nao sei se esta certo.
tenta assim:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//Loop infinito
while (true) {
try{
Robot robot = new Robot();
BufferedImage bi = robot.createScreenCapture(new // Captura a tela na àrea definida pelo retângulo
Rectangle(0, 0, 1440, 900)); // aqui vc configura as posições xy e o tam da área que quer capturar
ImageIO.write(bi, "jpg", new File("D://tela.jpg"));// Salva a imagem
} catch(AWTException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
try
{
//pode mudar aqui o tempo em milessegundos
Thread.currentThread().sleep(10000);
} catch(Exception e)
{
}
}
}
Vc pode utilizar as classes Timer e TimerTask que permitem que vc agende uma tarefa para ser executada em um determinado intervalo de tempo, essa seria a solução mais elegante, basta dar uma lida no javadoc ou procurar no google.
Mas vc tb pode utilizar o método Thread.sleep(), tenta colocar ele dentro do seu bloco try, assim:
ImageIO.write(bi, "jpg", new File("D://tela.jpg"));// Salva a imagem
Thread.sleep(5000); //Congela a thread a cada 5 segundos.
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
public class PrintScreen extends JFrame {
private static final long serialVersionUID = 1L;
private static final Rectangle ALL_SCREEN = new Rectangle(Toolkit
.getDefaultToolkit().getScreenSize());
private JButton startOrStopButton;
private Timer timer;
private Robot robot;
private int counter;
public PrintScreen() throws AWTException {
intialize();
}
private void intialize() throws AWTException {
robot = new Robot();
add(getStartOrStopButton());
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(200, 200);
setLocationRelativeTo(null);
}
private JButton getStartOrStopButton() {
if (startOrStopButton == null) {
startOrStopButton = new JButton();
startOrStopButton.setText("Iniciar");
startOrStopButton.addActionListener(new PrintScreenListener());
}
return startOrStopButton;
}
private class PrintScreenListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (timer == null) {
timer = new Timer("printScreen", true);
timer.schedule(new PrintScreenTask(), 0, 5000);
startOrStopButton.setText("Parar");
} else {
timer.cancel();
timer = null;
startOrStopButton.setText("Iniciar");
}
}
}
private class PrintScreenTask extends TimerTask {
@Override
public void run() {
BufferedImage print = robot.createScreenCapture(ALL_SCREEN);
try {
ImageIO.write(print, "png", File.createTempFile("image"
+ counter++, ".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws AWTException {
new PrintScreen().setVisible(true);
}
}
As imagens são salvas na pasta temporária do sistema. Você pode armazenar os objetos File que apontam para elas em um List para depois ter acesso a essas imagens (basta fazer algumas pequenas mudanças no método run() de PrintScreenTask.
Ah, e se vc kizer comparar 2 fotos, tem esse geito daki…
Por exemplo, se vc kizer fazer um keylogger que bata foto e envia pro seu email, vc faz a comparação… se 2 fotos forem iguais ele envia soh 1…
Basta alterar o código que eu postei ali em cima e aumentar o tempo da thread (onde ta 100).
Peguei esse exemplo no site do Carlan+Calazans.
É um geito meio paia, porque ele compara pixel por pixel da imagem, mas já ajuda !
nao nao, ja passei desta fase de curiosidade keyloguer e afins é um sistema que to criando para games, para tirar fotos da tela do jogador para ver se ta roubando nos jogos, ae to criando um para tirar fotos da tela, pegar os processos que estão na maquina e upar isso para um servidor, automaticamente
se souber de algo mais que possa me ajduar neste ponto agraderia
[quote=fmda]isso nao sera para o jogo e sim, é um aplicativo a parte que deve ser aberto antes do jogo
e um sistema de proteção para os organizadores do campeonato daquee jogo possa verificar se esta tudo correto[/quote]
Entendi. De qualquer forma, o comentário acima ainda se aplica.
[quote=marcobiscaro2112]Só tome um pouco de cuidado com o seguinte:
Esse comportamento deve estar bem explícito na licença do jogo.
O envio de informações pode atrapalhar o game play (consumo excessivo da rede, sem necessidade).
O jogo pode ser considerado um screenlogger por alguns antivírus devido ao seu comportamento: faz uma captura de tela e manda para a rede.[/quote]
Com certeza…
Ainda mais que, Mesmo que você fassa um algorítimo para bater fotos só quando o jogo estiver aberto, a pessoa pode estar com o jogo aberto e com uma janela do msn na tela no momento da captura… Seria considerado um screenlogger, e você teria acesso a informações pessoais…
Se você está fazendo o jogo, você pode fazer o algorítimo para bater fotos sempre da tela do jogo, mesmo que ela esteja minimizada…
Boa sorte, Flws !