两个问题!
    1. 如何知道在1024×768(17寸屏幕)上,鼠标指针的坐标。如:我要点击开始按钮,将鼠标移动到开始键上,这时,指针的坐标是???    2.知道指针坐标后,如何实现鼠标和键盘动作的模拟?比如:我程序的目的是,让鼠标自动点击“开始按钮”的“所有程序”项。
    
    先让鼠标移动到“开始按钮”,然后单击左键,之后移动到“所有程序”在单击左键。该怎样实现。    谢谢前辈们了!

解决方案 »

  1.   

    这方面的资料好像不少,可以GOOGLE BAIDU下。
      

  2.   

    给你个外挂的DAMO,你说的功能都包括在这个里面了package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*; 
    //主类
    public class Action
    {
     static int TimeNumber=0;
     public static void main(String[] args)
     {
      ViewFlow vf=new ViewFlow();
      vf.addActionlistener();
      }
     }
     ==============================================================================
    package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*;class MyActionListener2 implements ActionListener//核心类(实现主要功能)
     {
      static int ip=0;
      public void actionPerformed(ActionEvent e2)
      {
        try
        {
          Robot robot=new Robot();
         int x=73,y=23,
             x2=ViewFlow.slider1.getValue(),
                 y2=23,
             x3=228,y3=26,
             x4=0,y4=0;
    /*
    int i=ViewFlow.slider1.getValue(),j=23,k=0;
        {
          try
          {
           Robot rb=new Robot();
           while(k<1)
             { 
              rb.mouseMove(i,j);
             rb.getPixelColor(i,j);
             System.out.print((k++)+": "+rb.getPixelColor(i,j)+": ");
             System.out.println("(i="+(i++)+",j="+j+");");
               }
              }
              catch(AWTException e3){}
        }
    */
       if(robot.getPixelColor(x,y).equals(new Color(255,75,53))&&MyActionListener2.ip==1)//自动打怪
             {
           robot.keyPress(KeyEvent.VK_5);//捡东西
              if(  robot.getPixelColor(x3,y3).equals(new Color(255,107,87))
                                                       ||robot.getPixelColor(x3,y3).equals(new Color(255,107,86)))
              {
               robot.keyPress(KeyEvent.VK_1);//技能1
               //robot.keyPress(KeyEvent.VK_2);//技能2
               //robot.keyPress(KeyEvent.VK_3);//技能3
               //robot.keyPress(KeyEvent.VK_4);//打怪1
               }
              else
              {
               robot.keyPress(KeyEvent.VK_TAB);
               robot.keyRelease(KeyEvent.VK_TAB);
               }
              }
              
              
                  //System.out.println(MyActionListener.myTimer.getDelay());//改变加血速度测试
       if(!robot.getPixelColor(x,y).equals(new Color(255,75,53)))
       {
        ViewFlow.setText1("提示:请启动游戏");
        //System.out.println(ViewFlow.slider1.getValue());//测试1
        //System.out.println(ViewFlow.slider2.getValue());//测试2
        }                                        
       else if(  robot.getPixelColor(x2,y2).equals(new Color(255,75,53))       //加血位置与血的颜色相等
                 ||robot.getPixelColor(x,y).equals(robot.getPixelColor(x2,y2))   //加血位置与指定的理想的血的位置的颜色相等
               /*
               ||robot.getPixelColor(x2,y2).equals(new Color(255,159,147))     //加血位置与指血的颜色1比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(247,193,186))     //加血位置与指血的颜色2比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(228,103,88))      //加血位置与指血的颜色3比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(245,72,51))       //加血位置与指血的颜色4比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(255,183,174))     //加血位置与指血的颜色5比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(228,91,75))       //加血位置与指血的颜色6比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(248,73,52))       //加血位置与指血的颜色7比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(225,195,188))     //加血位置与指血的颜色8比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(235,141,130))     //加血位置与指血的颜色9比较 
                  ||robot.getPixelColor(x2,y2).equals(new Color(235,69,49))       //加血位置与指血的颜色10比较
                  ||robot.getPixelColor(x2,y2).equals(new Color(239,154,144))     //加血位置与指血的颜色11比较
                  */
               )
       {
        ViewFlow.setText1("不需加血");
        }
        
       else if(  robot.getPixelColor(x,y).equals(new Color(255,75,53))//加血
                 &&!robot.getPixelColor(x,y).equals(robot.getPixelColor(x2,y2))
               )
        {
           robot.keyPress(KeyEvent.VK_F8);//加血的键位
           //ViewFlow.setText1("自动加血开始");   
           }
       
       }
        catch(AWTException eException1){}
       
       }
      
      }
    ======================================================================
    package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*;
    class MyActionListener3 implements ActionListener
       {
        public void actionPerformed(ActionEvent e3)
        {
           MyActionListener.myTimer.stop();
           ViewFlow.setText1("       外挂程序已停止");
         }
        }
      

  3.   


    =============================================================================
    package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*;
    class MyActionListener4 implements ActionListener
        {
         public void actionPerformed(ActionEvent e7)
         {
           if(e7.getSource()==ViewFlow.helpMenuItem1)//打开使用帮助网页
           {
             try
            {
              Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/sunnyjavamoon/archive/2006/10/27/1352772.aspx");  
             }
             catch(IOException eIO){}
            }
           
           else if(e7.getSource()==ViewFlow.helpMenuItem2)//打开在线更新网页
           {
             try
            {
              Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/sunnyjavamoon/archive/2006/11/04/1366552.aspx");  
             }
             catch(IOException eIO){}
            }
            
           else if(e7.getSource()==ViewFlow.helpMenuItem3)//打开作者主页网页
           {
             try
            {
              Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/SunnyJavaMoon/");  
             }
             catch(IOException eIO){}
            }
           
           else if(e7.getSource()==ViewFlow.helpMenuItem4)//打开关于网页
           {
             try
            {
              Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/sunnyjavamoon/archive/2006/10/27/1352772.aspx");  
             }
             catch(IOException eIO){}
            }
            
           else if(e7.getSource()==ViewFlow.exchangeItem1)//论坛交流
           {
             try
            {
              Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://vip3.getbbs.com/Board/TList.aspx?BID=5177");  
             }
             catch(IOException eIO){}
            }
           
           else if(e7.getSource()==ViewFlow.exchangeItem2)//论坛主页
           {
             try
            {
              Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://ljf365.getbbs.com");  
             }
             catch(IOException eIO){}
            }
           else if(e7.getSource()==ViewFlow.jbt3)//论坛主页
           {
             try
            {
              Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/sunnyjavamoon/archive/2006/11/04/1366552.aspx");  
             }
             catch(IOException eIO){}
            }
           }
          }
    ====================================================================================
    package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*;
    class MyActionListener implements ActionListener
     {
      static Timer myTimer=new Timer(1500,new MyActionListener2());//速度控制    
      public void actionPerformed(ActionEvent e)
      {
       ViewFlow.setText1("        外挂程序启动中......");                               
       MyActionListener.myTimer.start();                      
       }
      }
    ===============================================================================
    package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*;
    class MyChangeListener1 implements ChangeListener
       {
        public void stateChanged(ChangeEvent e4)
        {
         ViewFlow.setText2("加血位置:"+ViewFlow.slider1.getValue()+"/170");
         }
        }
    =======================================================================
    package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*;
    class MyChangeListener2 implements ChangeListener
       {
        public void stateChanged(ChangeEvent e5)
        {
         ViewFlow.setText3("加血速度:"+ViewFlow.slider2.getValue()+" 毫秒/次");
         MyActionListener.myTimer.setDelay(ViewFlow.slider2.getValue());
         }
        }
    ===========================================================================
    package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*;
    class MyItemListener1 implements ItemListener
        {
         public void itemStateChanged(ItemEvent e6)
         {
          if(e6.getSource()==ViewFlow.jrb1)
          {
           MyActionListener2.ip=0;//手动
           //System.out.println(ViewFlow.ip);//测试单选键1
           }
          else if(e6.getSource()==ViewFlow.jrb2)
          {
           MyActionListener2.ip=1;//自动
           //System.out.println(ViewFlow.ip);//测试单选键2
           }
          }
         }
    ==================================================================================
      

  4.   


    package game;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.*;
    import java.io.*;
    //界面类
    class ViewFlow
    {
     Container jfContainer=null;
     JButton jbt1=null;
     JButton jbt2=null;
     static JButton jbt3=null;
     JPanel jp1=null;
     JPanel jp2=null;
     JPanel jp3=null;
     JPanel jp4=null;
     static JSlider slider1=null;
     static JSlider slider2=null;
     static JTextField jf1=new JTextField("请启动游戏",15);
     static JTextField jf2=new JTextField("加血位置:100"+"/170",15);
     static JTextField jf3=new JTextField("加血速度:1500"+" 毫秒/次",15);
     static JRadioButton jrb1=null;
     static JRadioButton jrb2=null;
     
     JMenuBar jmb=null;
     JMenu helpMenu=null;
     static JMenuItem helpMenuItem1=null;
     static JMenuItem helpMenuItem2=null;
      static JMenuItem helpMenuItem3=null;
      static JMenuItem helpMenuItem4=null;
      JMenu hightSet=null;
      static JMenuItem hightSetItem1=null;
      static JMenuItem hightSetItem2=null;
      static JMenuItem hightSetItem3=null;
      JMenu exchangeMenu=null;
      static JMenuItem exchangeItem1=null;
      static JMenuItem exchangeItem2=null;
     ButtonGroup bg=null;
     ViewFlow()
     {
      JFrame jf=new JFrame("武林外挂1.0");
      jf.setSize(218,490);
      jf.setLocation(550,70);
      
      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      jfContainer=jf.getContentPane();
      jfContainer.setLayout(new GridLayout(4,1,10,15));
      //面版
      jp1=new JPanel();
      jp2=new JPanel();
      jp3=new JPanel();
      jp4=new JPanel();
      
      //jp1.setSize(20,5);
      //jp2.setSize(30,30);
      jp1.setLayout(new FlowLayout(FlowLayout.CENTER,20,5));
      jp2.setLayout(new FlowLayout(FlowLayout.CENTER,20,5));
      jp3.setLayout(new FlowLayout(FlowLayout.CENTER,20,5));
      
      jp1.setBorder(BorderFactory.createTitledBorder("主控制区"));
      jp2.setBorder(BorderFactory.createTitledBorder("加血位置调整"));
      jp3.setBorder(BorderFactory.createTitledBorder("加血速度调整"));
      jp4.setBorder(BorderFactory.createTitledBorder("打怪模式设定"));
      
      jbt1=new JButton("开启");
      jbt2=new JButton("停止");
      jbt3=new JButton("在线升级");
      jbt3.setSize(10,20);
      
       jfContainer.add(jp1);//框架加入面版1
       jfContainer.add(jp2);//框架加入面版2
       jfContainer.add(jp3);//框架加入面版3 
       jfContainer.add(jp4);//框架加入面版4
       //滑杆1
       
       slider1=new JSlider(75,170,100);
      slider1.setPaintTicks(true);
      slider1.setMajorTickSpacing(20);
      slider1.setMinorTickSpacing(2);
      slider1.setSnapToTicks(true);
      //slider1.setPaintLabels(true);//显示刻度数字
      slider1.setPaintTrack(true);
      
      //滑杆2
      slider2=new JSlider(300,3000,1500);
      slider2.setPaintTicks(true);
      slider2.setMajorTickSpacing(300);
      slider2.setMinorTickSpacing(50);
      slider2.setSnapToTicks(true);
      //slider2.setPaintLabels(true);//显示刻度数字
      slider2.setPaintTrack(true);
      //单选按键
      jrb1=new JRadioButton("手动打怪");
      jrb2=new JRadioButton("自动打怪");
      bg=new ButtonGroup();
      //菜单
      jmb=new JMenuBar();
      jmb.setOpaque(true);
      jf.setJMenuBar(jmb);
      
      hightSet=buildHeightFileNenu();//生成高级选项菜单
      jmb.add(buildHeightFileNenu());//加载菜单
      
      exchangeMenu=builExchangeFileNenu();//生成问题交流菜单
      jmb.add(exchangeMenu);//加载菜单
      
      helpMenu=buildHelpFileMenu();//生成帮助菜单
      jmb.add(helpMenu);//加载菜单
     
      //面版
      jp1.add(jbt1);//面版1加入按键
       jp1.add(jbt2);//面版1加入按键
       jp1.add(jf1);
       bg.add(jrb1);
        bg.add(jrb2);
        jp2.add(slider1);
       jp2.add(jf2);
       jp3.add(slider2);   
       jp3.add(jf3);
       jp4.add(jrb1);
       jp4.add(jrb2);
       jp4.add(jbt3);
       jf.setVisible(true);
      }
      //  
      public JMenu buildHeightFileNenu()
      {
       JMenu file2=new JMenu("高级设置");//菜单1
       hightSetItem1=new JMenuItem("加血速度");//菜单2_菜单项1   
       hightSetItem2=new JMenuItem("加血位置");//菜单2_菜单项2
       hightSetItem3=new JMenuItem("打怪模式");//菜单3_菜单项3
       file2.add(hightSetItem1);
       file2.addSeparator();
       file2.add(hightSetItem2);
       file2.addSeparator();
       file2.add(hightSetItem3);
       return file2;
       } 
      public JMenu builExchangeFileNenu()
      {
       JMenu file2=new JMenu("问题交流");//菜单2
       exchangeItem1=new JMenuItem("论坛交流");//菜单2_菜单项1   
       exchangeItem2=new JMenuItem("龙旋风论坛");//菜单2_菜单项2
       file2.add(exchangeItem1);
       file2.addSeparator();
       file2.add(exchangeItem2);
       return file2;
       } 
      public JMenu buildHelpFileMenu()//菜单内容生成
      {
       JMenu file1=new JMenu("帮助");//菜单3
       helpMenuItem1=new JMenuItem("使用帮助");//菜单1_菜单项1   
       helpMenuItem2=new JMenuItem("在线更新");//菜单1_菜单项2
       helpMenuItem3=new JMenuItem("作者主页");//菜单1_菜单项2
       helpMenuItem4=new JMenuItem("关于");//菜单1_菜单项3
       file1.add(helpMenuItem1);
       file1.addSeparator();
       file1.add(helpMenuItem2);
       file1.addSeparator();
       file1.add(helpMenuItem3);
       file1.addSeparator();
       file1.add(helpMenuItem4);
       return file1;
       }
     public void addActionlistener()
     {
      jbt1.addActionListener(new MyActionListener());      
      jbt2.addActionListener(new MyActionListener3());
      jbt3.addActionListener(new MyActionListener4());
      
      slider1.addChangeListener(new MyChangeListener1());
      slider2.addChangeListener(new MyChangeListener2());
      
      jrb1.addItemListener(new MyItemListener1());
      jrb2.addItemListener(new MyItemListener1());
      
      MyActionListener4 MenuItemListener=new MyActionListener4();//菜单监视器
      //帮助菜单
      helpMenuItem1.addActionListener(MenuItemListener);
      helpMenuItem2.addActionListener(MenuItemListener);
      helpMenuItem3.addActionListener(MenuItemListener);
      helpMenuItem4.addActionListener(MenuItemListener);
      //高级设置
       hightSetItem1.addActionListener(MenuItemListener);
       hightSetItem2.addActionListener(MenuItemListener);
       hightSetItem3.addActionListener(MenuItemListener);
       //问题交流
       exchangeItem1.addActionListener(MenuItemListener);   
      exchangeItem2.addActionListener(MenuItemListener);
      }
      
     public static void setText1(String str)
     {
      jf1.setText(str);
      }
      
     public static void setText2(String str)
     {
      jf2.setText(str);
      }
      
     public static void setText3(String str)
     {
      jf3.setText(str);
      }
      
      }