随笔-30  评论-123  文章-0  trackbacks-0
摘要:本文展示了如何使用Java的Robot类创建一个能够捕获主屏幕内容的屏幕捕捉程序。本程序处理捕捉屏幕外,还能够将整个屏幕或者屏幕的一部分保存成.jpg文件。

java.awt.Robot类真的很好玩。玩Robot会给你带来很多乐趣。下面让我们看看用Robot是怎么创建你自己的屏幕捕捉程序的。

程序界面
下图是我的屏幕捕捉程序的界面。你可以用它来捕捉屏幕,裁剪选取的图片内容,并将结果保存为.jpg文件。
capture1.jpg
屏幕捕捉程序的界面很简单,包括一个菜单和一个用于显示捕捉图像的滚动窗口。在窗口上按住鼠标左键拖动鼠标,你会看到一个红色的虚线矩形,这就是图像选取框,选取图片以后选择裁剪菜单,就可以对图像进行裁减。见下图:
capture2.jpg

系统实现
本程序包括3个源文件:
Capture.java:启动应用程序,构建GUI;
ImageArea.java:显示和选取屏幕图片的组件;
ImageFileFilter.java:文件选择过滤器,限制只能选择JPEG文件。
下面我将结合代码片断介绍如何实现屏幕捕捉程序。

屏幕捕获
要想使用Robot类创建屏幕捕捉程序,首先要创建Robot对象。在Capture类的public static void main(String [] args)方法中用Robot的public Robot()创建Robot对象。如果创建成功,就会返回配置主屏幕坐标系统的Robot引用。如果平台不支持低级控制,就会抛出java.awt.AWTException。如果平台不允许创建Robot,就会抛出java.lang.SecurityException。希望在你的平台上不会抛出上面两个异常。

假设Robot对象已经创建,main()会调用Capture类的构造函数创建GUI。在创建GUI的同时,Capture调用dimScreenSize = Toolkit.getDefaultToolkit ().getScreenSize ();来获得屏幕的尺寸信息。因为Robot中用于执行屏幕捕获的public BufferedImage createScreenCapture(Rectangle screenRect)方法需要一个java.awt.Rectangle参数。构造函数通过rectScreenSize = new Rectangle (dimScreenSize);将java.awt.Dimension转换成Rectangle 。下面的代码片断展示了当菜单中捕捉菜单项按下后执行的屏幕捕捉动作。
// 执行屏幕捕捉时隐藏屏幕捕捉程序,使其不显示在桌面上.

setVisible (
false);

// 执行屏幕捕捉.

BufferedImage biScreen;
biScreen 
= robot.createScreenCapture (rectScreenSize);

// 完成屏幕捕捉后显示屏幕捕捉程序窗口.

setVisible (
true);

// 用捕获的屏幕图片刷新ImageArea组件并相应调整滚动条.

ia.setImage (biScreen);

jsp.getHorizontalScrollBar ().setValue (
0);
jsp.getVerticalScrollBar ().setValue (
0);
我不希望屏幕捕捉程序窗口遮住主屏幕,因此在捕捉屏幕之前我先将其隐藏。当获取到保存有屏幕图片象素的java.awt.image.BufferedImage 后,屏幕捕捉程序窗口再次显现出来并通过ImageArea组件显示出BufferedImage

图像选取
首先我们需要一个矩形框来标识我们想要裁剪的图像区域。在ImageArea组建中,提供了创建、操作、绘制这个矩形框的代码。下面的代码片断来自ImageArea.java,ImageArea类的构造函数创建了选取矩形框的实例,并且创建了java.awt.BasicStrokejava.awt.GradientPaint 对象来定义选取框的外观,同时还注册了鼠标和鼠标移动监听,来帮助你操作矩形选取框。
// 创建矩形选取框.最好是只创建一个选取框,
   // 这样比每次paintComponent()被调用时创建选取框好.
   // 减少了不必要的对象的创建

rectSelection 
= new Rectangle ();

// 定义矩形选取框的轮廓.

bs 
= new BasicStroke (5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                      
0new float [] 1212 }0);

// 定义矩形选取框的颜色

gp 
= new GradientPaint (0.0f0.0f, Color.red, 1.0f1.0f, Color.white,
                        
true);

// 建立鼠标监听.

MouseListener ml;
ml 
= new MouseAdapter ()
     
{
         
public void mousePressed (MouseEvent e)
         
{
            
// 没有捕获的图像时直接返回.

            
if (image == null)
                
return;

            destx 
= srcx = e.getX ();
            desty 
= srcy = e.getY ();

            repaint ();
         }

     }
;
addMouseListener (ml);

// 建立鼠标移动监听.

MouseMotionListener mml;
mml 
= new MouseMotionAdapter ()
      
{
          
public void mouseDragged (MouseEvent e)
          
{
             
// 没有捕获的图像时直接返回.

             
if (image == null)
                 
return;

             destx 
= e.getX ();
             desty 
= e.getY ();

             repaint (); 
          }

      }
;
addMouseMotionListener (mml);
当点击鼠标时,鼠标事件处理器将destx 和 srcx都设置为鼠标的横坐标,纵坐标业一样。源坐标和目的坐标一样意味着删除当前的矩形选取框。我们可以通过调用repaint(),repaint()会调用public void paintComponent(Graphics g)实现删除矩形选取框。paintComponent()方法会比较srcx与destx, srcydesty;如果他们不相等,就绘制一个新的矩形选取框。
// 绘制矩形选取框.

if (srcx != destx || srcy != desty)
{
    
// 计算左上和右下点的坐标.

    
int x1 = (srcx < destx) ? srcx : destx;
    
int y1 = (srcy < desty) ? srcy : desty;

    
int x2 = (srcx > destx) ? srcx : destx;
    
int y2 = (srcy > desty) ? srcy : desty;

    
// 确定矩形的原点.

    rectSelection.x 
= x1;
    rectSelection.y 
= y1;

    
// 确定矩形的长宽.

    rectSelection.width 
= (x2-x1)+1;
    rectSelection.height 
= (y2-y1)+1;

    
// 绘制矩形.

    Graphics2D g2d 
= (Graphics2D) g;
    g2d.setStroke (bs);
    g2d.setPaint (gp);
    g2d.draw (rectSelection);
}

在绘制矩形之前,要先确定矩形的左上和右下角,以便算出矩形的原点和长宽。因此你可以任意拖动鼠标绘制选取框,最后srcx/destxsrcy/desty中的最小值确定左上角,同理,最大值确定右下角。

图像裁剪
选取完图像以后,我们自然要裁剪它。当点击菜单中的“裁剪”菜单项时,ImageArea组件会将选中的图像裁减下来。如果裁剪成功,ImageArea的滚动条会重新设置,否则程序会弹出“超出范围”对话框。
// 如果裁剪成功,重新设置滚动条.

if (ia.crop ())
{
    jsp.getHorizontalScrollBar ().setValue (
0);
    jsp.getVerticalScrollBar ().setValue (
0);
}

else
    showError (
"超出范围");

也许你会问为什么会出现“超出范围”呢?请看下图
capture3.jpg
由于裁剪后GUI窗口不会改变大小,因此可能裁减后的图片比程序的GUI窗口小,GUI窗口的背景就显露出来。如果选取框包含了GUI窗口的背景象素,那么在裁剪时就会报“超出范围”错误。

裁剪功能是由ImageArea的public boolean crop() 方法实现的。当裁剪成功或者没有可裁减图像时返回true,如果选取框包含有GUI窗口背景象素,就返回false。下面是代码:
public boolean crop ()
{
   
// 如果选取框只是一个点,返回true

   
if (srcx == destx && srcy == desty)
       
return true;

   
// 默认返回true.

   
boolean succeeded = true;

   
// 计算选取框的左上角和右下角坐标.

   
int x1 = (srcx < destx) ? srcx : destx;
   
int y1 = (srcy < desty) ? srcy : desty;

   
int x2 = (srcx > destx) ? srcx : destx;
   
int y2 = (srcy > desty) ? srcy : desty;

   
// 计算选取框的尺寸.

   
int width = (x2-x1)+1;
   
int height = (y2-y1)+1;

   
// 创建保存裁剪图像的图像缓冲.

   BufferedImage biCrop 
= new BufferedImage (width, height,
                                             BufferedImage.TYPE_INT_RGB);
   Graphics2D g2d 
= biCrop.createGraphics ();

   
// 执行裁剪操作.

   
try
   
{
       BufferedImage bi 
= (BufferedImage) image;
       BufferedImage bi2 
= bi.getSubimage (x1, y1, width, height);
       g2d.drawImage (bi2, 
null00);
   }

   
catch (RasterFormatException e)
   
{
      succeeded 
= false;
   }


   g2d.dispose ();

   
if (succeeded)
       setImage (biCrop); 
   else
   
{
       
// 准备删除选取框.

       srcx 
= destx;
       srcy 
= desty;

       
// 删除选取框.

       repaint ();
   }


   
return succeeded;
}


crop()会调用BufferedImagepublic BufferedImage getSubimage(int x, int y, int w, int h)方法将选取框中的图像从原图像中裁剪下来。如果参数不是指定的BufferedImage区域,此方法会抛出java.awt.image.RasterFormatException 异常,返回fasle。

保存图像
本程序允许保存图像。你可以通过文件选择存对话框为要报存的图像取个名字。文件保存对话框在Capture类的构造函数中定义。
final JFileChooser fcSave = new JFileChooser ();
fcSave.setCurrentDirectory (
new File (System.getProperty ("user.dir")));
fcSave.setAcceptAllFileFilterUsed (
false);
fcSave.setFileFilter (
new ImageFileFilter ());

为了约束文件选择对话框所能保存只能保存JPEG文件,我们创建了一个ImageFileFilter类作为文件选择对话框的文件过滤器。如果传入方法public boolean accept (File f)的参数不是目录或者以.jpg .jpeg为后缀的文件,那么返回false
public boolean accept (File f)
{
   
// 允许用户选择文件夹.

   
if (f.isDirectory ())
       
return true;

   
// 允许用户选择以.jpg 或 .jpeg为后缀的文件

   String s 
= f.getName ();
   
int i = s.lastIndexOf ('.');

   
if (i > 0 && i < s.length ()-1)
   
{
       String ext 
= s.substring (i+1).toLowerCase ();

       
if (ext.equals ("jpg"|| ext.equals ("jpeg"))
           
return true;
   }


   
// 没有可以选择的.

   
return false;
}

当点击菜单的“另存为”菜单项时,调用文件选择器。文件选择器会确保你的文件保存为JPEG文件。如果你为文件气的名字已经被另一个文件使用,文件选择器将询问你是否覆盖原文件。
// 显示文件选择器,不选中任何文件.
// 如果用户点击cancel,则退出.

fcSave.setSelectedFile (
null);
if (fcSave.showSaveDialog (Capture.this!=
    JFileChooser.APPROVE_OPTION)
    
return;

// 获取选择的文件.如果不是以.jpg 或.jpeg为后缀,
 // 添加.jpg后缀

File file 
= fcSave.getSelectedFile ();
String path 
= file.getAbsolutePath ().toLowerCase ();
if (!path.endsWith (".jpg"&& !path.endsWith (".jpeg"))
    file 
= new File (path += ".jpg");

// 如果文件已存在,通知用户                  
if (file.exists ())
{
    
int choice =  JOptionPane.
                  showConfirmDialog (
null,
                                     
"Overwrite file?",
                                     
"Capture",
                                     JOptionPane.
                                     YES_NO_OPTION);
    
if (choice == JOptionPane.NO_OPTION)
        
return;
}

如果文件不存在,或者你允许覆盖已有文件,程序将会保存图片。为了完成保存,我们使用了Java的ImageIO框架。代码如下:
ImageWriter writer = null;
ImageOutputStream ios 
= null;

try
{
    
// 获得一个jpeg 类型的写入器

    Iterator iter;
    iter 
= ImageIO.getImageWritersByFormatName ("jpeg");

    
// 验证写入器是否存在

    
if (!iter.hasNext ())
    
{
        showError (
"Unable to save image to jpeg file type.");
        
return;
    }
.

    writer 
= (ImageWriter) iter.next();


    
// 获取写入器写入目标

    ios 
= ImageIO.createImageOutputStream (file);
    writer.setOutput (ios);

    
// 设置jpeg压缩率为 95%.

    ImageWriteParam iwp 
= writer.getDefaultWriteParam ();
    iwp.setCompressionMode (ImageWriteParam.MODE_EXPLICIT);
    iwp.setCompressionQuality (
0.95f);

    
// 写入图像.

    writer.write (
null,
                  
new IIOImage ((BufferedImage)
                                ia.getImage (), 
nullnull),
                  iwp);
}

catch (IOException e2)
{
    showError (e2.getMessage ());
}

finally
{
    
try
    
{
        
// 清理.

        
if (ios != null)
        
{
            ios.flush ();
            ios.close ();
        }


        
if (writer != null)
            writer.dispose ();
    }

    
catch (IOException e2)
    
{
    }

}

保存后的清理工作很有必要。我将清理代码上到finally块中,这样不管是正常的保存成功还是意外地中止,都能执行响应的清理工作。

改进
本文中的这个屏幕捕捉程序只能捕捉主屏幕设备的图像。也许你希望捕获所有屏幕的图像。要实现这个功能,你可以将下面的代码加入到Capture.java中:
GraphicsEnvironment graphenv = GraphicsEnvironment.getLocalGraphicsEnvironment ();
GraphicsDevice [] screens 
= graphenv.getScreenDevices ();
BufferedImage [] captures 
= new BufferedImage [screens.length];

for (int i = 0; i < screens.length; i++)
{
    DisplayMode mode 
= screens [i].getDisplayMode ();
    Rectangle bounds 
= new Rectangle (00, mode.getWidth (), mode.getHeight ());
    captures [i] 
= new Robot (screens [i]).createScreenCapture (bounds);
}


上面介绍了用Robot类制作Java屏幕捕捉程序的全过程。希望对大家能有所启示。如果需要本程序的全部源代码,请留下邮箱,我会及时发给你。
posted on 2006-05-17 11:30 学二的猫 阅读(5480) 评论(72)  编辑  收藏 所属分类: Java禅机

评论:
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-18 16:56 | spermakert
刚学JAVA向你学习!
spermakert@gamil.com
谢谢提供代码  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-18 17:19 | 乾为天
liuyong25@gmail.com

enjoy share  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-18 17:36 | 学二的猫
@乾为天
@spermakert
源代码已经发到你们的邮箱里了,请查收。
  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-18 21:03 | FinalFantasy
能给份源代码么?谢谢拉……  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-19 08:47 | 学二的猫
@FinalFantasy
请留下邮箱地址。我会发过去。  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-20 16:27 | 23452
ljm983_2001@126.com
谢谢。。。

真好  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-20 20:37 | 学二的猫
@23452
周一发给你.  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-21 10:14 | benwong314
benwongjob@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-22 15:23 | btk
bluebillow@163.com
学习一下
thx  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-23 19:15 | loving...
能个小妹我一份吗?

谢谢。。

renxianqi.2008@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-30 09:12 | 游客2006
能不能也E-mail一份给我啊,谢谢你了  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-30 09:12 | 游客2006
能不能也E-mail一份给我啊,谢谢你了,忘了给你邮件地址晕
wu_zhifeng@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-05-30 10:21 | 游客2006
谢谢,收到了,你的博客不错啊  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-06-07 09:56 | Wen
topgun_wen@hotmail.com
Thanks! 有机会多交流!  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-06-16 17:31 | Mir
Mir@163.com
3Q~  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2006-06-17 15:41 | 学二的猫
@Mir
最近在忙毕业设计和答辩,所以不能马上回复你。星期二发给你,好吗?  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-06-15 10:01 | xinxin
能给我一份吗?

谢谢。。

XL84867233@126.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-06-20 18:18 | xiaohu
能给我看看吗/
谢谢!~
xiaohu7924@126.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-07-17 16:15 | yueye
发给我份好么
谢谢!~
yueye19841212@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-07-22 11:00 | 天之陨
179016660@qq.com
还有源码吗?有的话请发我一份,谢谢!  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-07-27 09:55 | Matthew Chen
晕,从06年到现在一直有人要吗?我也要一个djsl6071@hotmail.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-08-01 20:00 | HLL
发给我份好么
谢谢
HLL_1986@126.com  回复  更多评论
  
# 寻求Java版屏幕捕捉程序 2007-08-12 19:34 | 小毛
顶,强!发我一分吧,先谢谢你了!
cuizhenhua3310@yahoo.com.cn  回复  更多评论
  
# 急求 2007-08-15 15:23 | 小毛
顶,强!发我一分吧,先谢谢你了!
cuizhenhua3310@yahoo.com.cn  回复  更多评论
  
# Java版屏幕捕捉程序[未登录] 2007-08-15 15:28 | 小菜
发给小地一份 xiasha-456@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-09-27 21:13 | 火麟食日
whisperlin@21cn.com
兄弟先谢了啊  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-11-19 17:15 | testlike
能给我一份源代码么,zhang123sx@tom.com,非常感谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-11-26 10:33 | 张勇
兄弟,给我也发一份,baggio1958@sohu.com.
谢谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-11-27 02:56 | xu
麻烦楼主也传我一份 stxu1987@163.com  回复  更多评论
  
# 请发送源代码,多谢 2007-12-05 20:57 | 魏来
weilai@thtf.com.cn  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2007-12-11 09:36 | lenj
8626530@qq.com 谢谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-01-17 18:11 | jove
fingerlinglovea@163.com 谢谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-01-20 14:50 | kusu
thank you!!


kangkang1986@126.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-01-24 19:39 | cmhdy
能不能也E-mail一份给我啊,cmhdy@hotmail.com
谢谢你了  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-01-31 16:01 | cmhdy
麻烦楼主也传我一份 cmhdy@163.com   回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-01-31 16:02 | cmhdy
麻烦楼主也传我一份 cmhdy@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-01-31 18:21 | samttsch
samttsch@163.com
3Q  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2008-02-21 15:03 | dawei
lklkdawei@163.com
谢谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-03-24 11:36 | 吴章银
wuzhangyin@126.com
谢谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-04-22 10:36 | wangjun
junzheng_126@126.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-04-26 21:32 | lp
这篇文章真不错!
两年多了一直有人要代码,可见含金量!
我也不能免俗,szrw668@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-05-24 21:34 | 倪斌
真的不错哎,向你学习,呵呵。
发给我份参考下吧。
nibin123@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-05-30 17:55 | greenpith
给个我吧!谢谢!
greenpith@126.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2008-06-11 21:57 | jimmy
My i have the code?Thanks a lot!  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2008-06-11 21:58 | jimmy
E-mail address : woshijiangjun22@163.com
  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-07-10 15:26 | MLP
请给我一份,我急用,malanpeng@126.com,万分感谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-07-10 15:27 | MLP
要是有设计报告就更好了,呵呵,先谢谢了  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-10-08 10:56 | 二大爷
别的网上摘抄下来的吧  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-10-08 11:02 | 二大爷
@jimmy
网上到处都有,你小子还给你二大爷使英文  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2008-10-25 08:41 | 秦时月
看了以上代码,觉得很不错,请发一份给我
不胜感激!
email:xiangyuanxuan1982@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2008-10-31 00:26 | lulu
斑竹,能否发给我一份?
cdl1126@sohu.com
谢谢。  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2009-02-11 21:52 | 蜗牛
546430850@qq.com

能否给我一份源码啊,谢谢了  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2009-06-07 10:47 | xueyi
zuo-1998@163.com
求源代码,谢谢!  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2009-12-19 22:22 | 903960907@qq.com
903960907@qq.com
  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2010-01-04 21:59 | DJF
能发下源代码吗437538453@qq.com 谢谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2010-01-08 15:45 | zxg
请发一份源代码给我,谢谢。
zxgfirefox@gmail.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2010-05-11 23:08 | shan
461375932@qq.com,谢谢啦  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2010-05-11 23:09 | shan
461375932@qq.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2010-08-19 17:11 | jason
正需要 谢谢了 jasongwt@gmail.com   回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2010-08-21 00:55 | yaphet
541579607@qq.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2010-08-30 11:08 | cll
changlele01@163.com
十分感谢!!!  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2011-01-07 11:23 | 凝知
先评论再学习  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2011-09-18 22:02 | tom
还请发一份给我
邮箱: 522845072@qq.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2011-09-18 22:04 | tom
还请发一份给我
邮箱:522845072@qq.com

Thank you!  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2011-11-16 10:21 | fish
给我发一份hjtang.oreo@gmail.com
  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2012-03-22 16:11 | 晓明
顶,强!发我一分吧,先谢谢你了!
1976135784@qq.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2012-05-09 13:36 | 记忆碎片
能把源代码也给我发一份吗,谢谢  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序[未登录] 2012-05-09 13:37 | 记忆碎片
348472012@qq.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2012-05-14 09:35 | yujiaming
求一份源代码,学习学习。谢谢版主。
我的邮箱是hityujiaming@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2012-06-25 14:44 | rentent
求一份源代码,学习学习。谢谢版主。
我的邮箱是rentent@163.com  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2012-09-09 00:58 | hiv
yes,学习了,  回复  更多评论
  
# re: 使用Robot类创建自己的Java版屏幕捕捉程序 2013-03-18 17:02 | 莫煜
求一份源代码,学习学习。谢谢版主.我的邮箱是865007837@qq.com
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: