Java模拟QQ桌面截图功能实现方法

本文实例讲述了Java模拟QQ桌面截图功能实现方法。分享给大家供大家参考。具体如下:

QQ的桌面截图功能非常方便,去年曾用Java模拟过一个,现整理出来。
本方法首先需要抓到屏幕的整个图象,将图象显示在一个JFrame中,再将JFrame全屏显示,这样就模拟出了一个桌面,Java也就可以获得鼠标的作用区域从而实现桌面中的小范围截屏。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
/**
 * 用Java模拟出QQ桌面截图功能
 */
public class Test extends JFrame {
 private static final long serialVersionUID = -267804510087895906L;
 private JButton button = null;
 private JLabel imgLabel = null;
 public Test() {
 button = new JButton("模拟屏幕(点右键退出)");
 button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  try {
   new ScreenWindow(imgLabel);
  } catch (Exception e1) {
   JOptionPane.showConfirmDialog(null, "出现意外错误!", "系统提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
  }
  }
 });
 JPanel pane = new JPanel();
 pane.setBackground(Color.WHITE);
 imgLabel = new JLabel();
 pane.add(imgLabel);
 JScrollPane spane = new JScrollPane(pane);
 this.getContentPane().add(button, BorderLayout.NORTH);
 this.getContentPane().add(spane);
 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 this.setSize(300, 200);
 this.setLocationRelativeTo(null);
 this.setVisible(true);
 }
 public static void main(String[] args) {
 new Test();
 }
}
class ScreenWindow extends JFrame {
 private static final long serialVersionUID = -3758062802950480258L;
 private boolean isDrag = false;
 private int x = 0;
 private int y = 0;
 private int xEnd = 0;
 private int yEnd = 0;
 public ScreenWindow(final JLabel imgLabel) throws AWTException, InterruptedException {
 Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize();
 JLabel label = new JLabel(new ImageIcon(ScreenImage.getScreenImage(0, 0, screenDims.width, screenDims.height)));
 label.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
 label.addMouseListener(new MouseAdapter() {
  public void mouseClicked(MouseEvent e) {
  if (e.getButton() == MouseEvent.BUTTON3) {
   dispose();
  }
  }
  public void mousePressed(MouseEvent e) {
  x = e.getX();
  y = e.getY();
  }
  public void mouseReleased(MouseEvent e) {
  if (isDrag) {
   xEnd = e.getX();
   yEnd = e.getY();
   if(x > xEnd){
   int temp = x;
   x = xEnd;
   xEnd = temp;
   }
   if(y > yEnd){
   int temp = y;
   y = yEnd;
   yEnd = temp;
   }
   try {
   imgLabel.setIcon(new ImageIcon(ScreenImage.getScreenImage(x, y, xEnd - x, yEnd - y)));
   } catch (Exception ex) {
   JOptionPane.showConfirmDialog(null, "出现意外错误!", "系统提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
   }
   dispose();
  }
  }
 });
 label.addMouseMotionListener(new MouseMotionListener() {
  public void mouseDragged(MouseEvent e) {
  if(!isDrag)
   isDrag = true;
  }
  public void mouseMoved(MouseEvent e) {
  /** 拖动过程的虚线选取框需自己实现 */
  }
 });
 this.setUndecorated(true);
 this.getContentPane().add(label);
 this.setSize(screenDims.width, screenDims.height);
 this.setVisible(true);
 this.setExtendedState(JFrame.MAXIMIZED_BOTH);
 }
}
class ScreenImage {
 public static Image getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException {
 Robot robot = new Robot();
 Image screen = robot.createScreenCapture(new Rectangle(x, y, w, h)).getScaledInstance(w, h, Image.SCALE_SMOOTH);
 MediaTracker tracker = new MediaTracker(new Label());
 tracker.addImage(screen, 1);
 tracker.waitForID(0);
 return screen;
 }
}

希望本文所述对大家的java程序设计有所帮助。

(0)

相关推荐

  • Java基于JavaMail实现向QQ邮箱发送邮件

    最近项目在做新闻爬虫,想实现这个功能:爬虫某个页面失败后,把这个页面的 url 发到邮箱.最终实现的效果图如下,后期可以加上过滤标签.失败状态码等,方便分类搜索异常. 开发人员可以根据邮件里的 url 和堆栈信息,分析爬虫失败的原因. 是不是服务器 down 了? 还是爬虫的 Dom 解析没有解析到内容? 还是正则表达式对于这个页面不适用? 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 SMTP 服务 注意开启完之后,QQ 邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原

  • java使用HttpSession实现QQ访问记录

    java如何使用HttpSession实现QQ的访问记录,本文为大家揭晓答案,具体内容如下 1. 编写QQ空间数据类(QQS.java) public class QQS { private static LinkedHashMap<Integer, String> qqs = new LinkedHashMap<Integer, String>(); static{ qqs.put(10001, "张三"); qqs.put(10002, "李四&q

  • java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)

    java使用正则表达式进行表单验证工具类,可以验证邮箱.手机号码.qq号码等 复制代码 代码如下: package util; import java.util.regex.Matcher;import java.util.regex.Pattern; /** * 使用正则表达式进行表单验证 *  */ public class RegexValidateUtil {    static boolean flag = false;    static String regex = ""

  • java mail使用qq邮箱发邮件的配置方法

    程序入口:Test_Email_N.java 复制代码 代码如下: import java.io.IOException;import java.util.Date;import java.util.Properties; import javax.mail.Authenticator;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mai

  • 使用java swing实现qq登录界面示例分享

    用Java Swing做的一个QQ登录界面 复制代码 代码如下: import java.awt.Container;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBox;import javax

  • Java模拟QQ桌面截图功能实现方法

    本文实例讲述了Java模拟QQ桌面截图功能实现方法.分享给大家供大家参考.具体如下: QQ的桌面截图功能非常方便,去年曾用Java模拟过一个,现整理出来. 本方法首先需要抓到屏幕的整个图象,将图象显示在一个JFrame中,再将JFrame全屏显示,这样就模拟出了一个桌面,Java也就可以获得鼠标的作用区域从而实现桌面中的小范围截屏. import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import

  • Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)

    本文全部操作均在windows环境下 安装 Python Python是一种跨平台的计算机程序设计语言,它可以运行在Windows.Mac和各种Linux/Unix系统上.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发 去Python的官网  www.python.org  下载安装 安装时勾选pip (python包管理工具),同时安装pip python安装好之后,打开命令行工具cmd,输入

  • Java模拟qq软件的详细过程

    目录 登陆界面的实现 登陆界面代码Login类 login的监听类 LoginListener 聊天界面运行图 Client类代码 Server代码 登陆界面代码 **之前在封装代码后出现了问题,按照最初的写法,在登陆完毕后弹出聊天界面后会卡死,原因是当时登陆界面和聊天界面都是使用的主线程,我的代码没有写其他线程,无法多线程运行,因此在弹出聊天界面时线程不够用了,就卡在了监听线程里,因为在监听线程中再有新的监听就会被卡住 在宇哥的指点下,将启动服务器和客户端的部分改为线程,就解决了此问题.改善后

  • Java模拟QQ实现聊天互动程序

    目录 介绍 功能演示 运用到的知识点 核心代码 服务端 客户端 介绍 实现的功能.步骤: 1.定义JFrame窗体中的组件 2.在构造方法中初始化窗体的组件 3.使用网络编程完成数据的传输(TCP,UDP协议) 4.实现发送按钮的监听点击事件 5.实现回车键发送数据 功能演示 没有点发送,数据却发送出去了是因为按了回车键 运用到的知识点 GUI:java实现窗体.Swing.其实JAVA Swing的GUI目前企业中已经不用了,主要是一些学校和培训机构用来教导学生写一些游戏.小项目,练练手的.

  • Java编程调用微信支付功能的方法详解

    本文实例讲述了Java编程调用微信支付功能的方法.分享给大家供大家参考,具体如下: 微信开发文档地址:https://mp.weixin.qq.com/wiki/home/ 从调用处开始 我的流程: 1.点击"支付"按钮,去后台 --> 2.后台生成支付所需数据返回页面 --> 3.页面点击"确认支付"调用微信支付js.完成支付功能. 支付按钮 <div class="button" id="pay" onc

  • JS模拟按钮点击功能的方法

    本文实例讲述了JS模拟按钮点击功能的方法.分享给大家供大家参考,具体如下: <html> <head> <title>usually function</title> </head> <script> function load(){ //下面两种方法效果是一样的 document.getElementById("target").onclick(); document.getElementById("t

  • 基于Java实现QQ登录注册功能的示例代码

    目录 前言 实现代码 登录页面 注册页面 效果展示 前言 本文主要应用的技术有:GUI.JDBC.多线程 实现的功能具体如下: 1.登录功能 2.注册功能 3.是否隐藏密码的选择以及实现功能 4.选择性别功能 5.密码与确认密码功能 6.登录页面实时展示当前的时间 7.当登录时用户名与密码在数据库中没有相匹配的数据,则会跳转到注册页面上去. 8.同样,注册完毕后,数据会运用JDBC将数据写入数据库中,然后跳转回登录页面. 实现代码 登录页面 import javax.swing.*; impor

  • WPF仿微信实现截图功能的方法详解

    目录 前言 一.ScreenCut.cs 代码如下 二.ScreenCut.xaml 代码如下 三.ScreenCutExample.xaml 代码如下 每日一笑 肚子疼,去厕所排便,结果什么都没拉出来.看着自己坐在马桶上痛苦又努力却一无所获的样子,仿佛看到了自己平凡的一生. 前言 有小伙伴需要在软件反馈窗体增加截图功能需求,所以今天来实现一个仿微信的截图. 效果预览(更多效果请下载源码体验) 一.ScreenCut.cs 代码如下 using Microsoft.Win32; using Sy

  • JAVA实现双向链表的增删功能的方法

    JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 static Node node1 = new Node("name1"); static Node node2 = new Node("name2"); static Node node3 = new Node("name3"); static Node

  • C# 实现QQ式截图功能实例代码

    这个功能一共有两部分组成,第一部分是窗体代码,另外的一部分是一个辅助方法.直接贴出代码,以供大家参考: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.D

随机推荐