周日突然搞到一个游戏,需要不停的按鼠标左键。上网下载了几个试用了一下,不是不好用就是要收费。NND这么简单的功能还收钱。

自己写一个。

主要有两个功能:

1。响应系统热键:JAVA下需要JNI,上CSDN搜了一下,果然有:http://www.blogjava.net/Files/walsece/jintellitype.rar,谢谢,就用你了(源泉:http://blog.csdn.net/tianshi0253/archive/2008/05/21/2464990.aspx)

2。自动鼠标左键单击,周期可调,用Robot.

第1步:热键:WindowsHotKey.java

package automouse.hotkey; import java.util.HashMap; import java.util.Map; import com.melloware.jintellitype.HotkeyListener; import com.melloware.jintellitype.JIntellitype; public final class WindowsHotKey { public static final int MOD_NONE = 0; public static final int MOD_ALT = JIntellitype.MOD_ALT; public static final int MOD_SHIFT = JIntellitype.MOD_SHIFT; public static final int MOD_CONTROL = JIntellitype.MOD_CONTROL; public static final int MOD_WIN = JIntellitype.MOD_WIN; private static WindowsHotKey instance; private static WindowsHotKey getInstance() { if (instance == null) { instance = new WindowsHotKey(); } return instance; } private WindowsHotKey() { JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() { public void onHotKey(int i) { HotkeyListener l = listeners.get(i); if (l != null) { l.onHotKey(i); } } }); } private Map<Integer, HotkeyListener> listeners = new HashMap<Integer, HotkeyListener>(); private final void addHotkeyImpl(int id, int modifiers, int keyCode, HotkeyListener listener) { if (listeners.containsKey(id)) { JIntellitype.getInstance().unregisterHotKey(id); } JIntellitype.getInstance().registerHotKey(id, modifiers, keyCode); listeners.put(id, listener); } private final void removeHotkeyImpl(int id) { JIntellitype.getInstance().unregisterHotKey(id); listeners.remove(id); } private final void removeAllHotkeyImpl() { for (int id : listeners.keySet()) { JIntellitype.getInstance().unregisterHotKey(id); } listeners.clear(); } public static void addHotkey(int id, int modifiers, int keyCode, HotkeyListener listener) { getInstance().addHotkeyImpl(id, modifiers, keyCode, listener); } public static void removeAllHotkey() { getInstance().removeAllHotkeyImpl(); } public static void removeHotkey(int id) { getInstance().removeHotkeyImpl(id); } }

第2步,用Robot:AutoMouseAction.java

这里有唯一值得称道的地方,避免了双击(来源:http://blog.csdn.net/cnike/archive/2009/11/25/4870064.aspx)

package automouse.mouse; import java.awt.MouseInfo; import java.awt.Point; import java.awt.Robot; import java.awt.event.InputEvent; public class AutoMouseAction extends Thread { private int interval = 100; private boolean isAvoidDbClick = true; private int buttons = InputEvent.BUTTON1_MASK; private boolean isRunning = true; public void exit() { isRunning = false; // interrupt(); } @Override public void run() { try { Robot robot = new Robot(); int count = 0; int offset = 0; while (isRunning) { Point p = MouseInfo.getPointerInfo().getLocation(); if (isAvoidDbClick) { if (count % 2 == 0) { offset = 5; } else { offset = 0; } } robot.mouseMove(p.x + offset, p.y); robot.mousePress(buttons); robot.mouseRelease(buttons); robot.mouseMove(p.x, p.y); robot.delay(interval); ++count; if (count >= 100) { count = 0; } } } catch (Exception e) { e.printStackTrace(); } } public AutoMouseAction(int interval, boolean isAvoidDbClick, int buttons) { this.interval = interval; this.isAvoidDbClick = isAvoidDbClick; this.buttons = buttons; start(); } }

第3步:组装:AutoMouseFrame.java

package automouse.ui; import java.awt.BorderLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.BorderFactory; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import automouse.hotkey.WindowsHotKey; import automouse.mouse.AutoMouseAction; import com.melloware.jintellitype.HotkeyListener; public class AutoMouseFrame { private JFrame jFrame = null; private JPanel jContentPane = null; private JMenuBar jJMenuBar = null; private JMenu fileMenu = null; private JMenu helpMenu = null; private JMenuItem exitMenuItem = null; private JMenuItem aboutMenuItem = null; private JDialog aboutDialog = null; private JPanel aboutContentPane = null; private JLabel aboutVersionLabel = null; private JPanel intervalPanel = null; private JSlider intervalSlider = null; private JLabel intervalLabel = null; private JLabel jLabel = null; private JLabel jLabel1 = null; /** * This method initializes intervalPanel * * @return javax.swing.JPanel */ private JPanel getIntervalPanel() { if (intervalPanel == null) { intervalPanel = new JPanel(); intervalPanel.setBorder(BorderFactory.createTitledBorder("Timer interval:(ms)")); intervalPanel.setLayout(new BorderLayout()); intervalPanel.add(getIntervalSlider(), BorderLayout.CENTER); intervalPanel.add(getIntervalLabel(), BorderLayout.WEST); } return intervalPanel; } private JLabel getIntervalLabel() { if (intervalLabel == null) { intervalLabel = new JLabel(); intervalLabel.setText(String.valueOf(getIntervalSlider().getValue())); } return intervalLabel; } /** * This method initializes intervalSlider * * @return javax.swing.JSlider */ private JSlider getIntervalSlider() { if (intervalSlider == null) { intervalSlider = new JSlider(); intervalSlider.setMaximum(2000); intervalSlider.setMajorTickSpacing(500); intervalSlider.setPaintTicks(true); intervalSlider.setPaintLabels(true); intervalSlider.setMinorTickSpacing(100); intervalSlider.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { getIntervalLabel().setText(String.valueOf(getIntervalSlider().getValue())); } }); } return intervalSlider; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SwingUtilities.invokeLater(new Runnable() { public void run() { AutoMouseFrame application = new AutoMouseFrame(); application.getJFrame().setVisible(true); } }); } /** * This method initializes jFrame * * @return javax.swing.JFrame */ private JFrame getJFrame() { if (jFrame == null) { jFrame = new JFrame(); jFrame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { beforeClose(); } }); jFrame.setJMenuBar(getJJMenuBar()); jFrame.setSize(300, 200); jFrame.setContentPane(getJContentPane()); jFrame.setTitle("Auto mouse click"); initHotkey(); } return jFrame; } private AutoMouseAction action = null; private void initHotkey() { WindowsHotKey.addHotkey(100, WindowsHotKey.MOD_NONE, KeyEvent.VK_F7, new HotkeyListener() { public void onHotKey(int i) { if (action == null) { action = new AutoMouseAction(getIntervalSlider().getValue(), true, InputEvent.BUTTON1_MASK); } } }); WindowsHotKey.addHotkey(101, WindowsHotKey.MOD_NONE, KeyEvent.VK_F8, new HotkeyListener() { public void onHotKey(int i) { if (action != null) { action.exit(); action = null; } } }); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jLabel1 = new JLabel(); jLabel1.setText("F7:Start"); jLabel = new JLabel(); jLabel.setText("F8: Stop"); jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getIntervalPanel(), BorderLayout.NORTH); jContentPane.add(jLabel, BorderLayout.SOUTH); jContentPane.add(jLabel1, BorderLayout.WEST); } return jContentPane; } /** * This method initializes jJMenuBar * * @return javax.swing.JMenuBar */ private JMenuBar getJJMenuBar() { if (jJMenuBar == null) { jJMenuBar = new JMenuBar(); jJMenuBar.add(getFileMenu()); jJMenuBar.add(getHelpMenu()); } return jJMenuBar; } /** * This method initializes jMenu * * @return javax.swing.JMenu */ private JMenu getFileMenu() { if (fileMenu == null) { fileMenu = new JMenu(); fileMenu.setText("File"); fileMenu.add(getExitMenuItem()); } return fileMenu; } /** * This method initializes jMenu * * @return javax.swing.JMenu */ private JMenu getHelpMenu() { if (helpMenu == null) { helpMenu = new JMenu(); helpMenu.setText("Help"); helpMenu.add(getAboutMenuItem()); } return helpMenu; } /** * This method initializes jMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getExitMenuItem() { if (exitMenuItem == null) { exitMenuItem = new JMenuItem(); exitMenuItem.setText("Exit"); exitMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { beforeClose(); } }); } return exitMenuItem; } /** * This method initializes jMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getAboutMenuItem() { if (aboutMenuItem == null) { aboutMenuItem = new JMenuItem(); aboutMenuItem.setText("About"); aboutMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JDialog aboutDialog = getAboutDialog(); aboutDialog.pack(); Point loc = getJFrame().getLocation(); loc.translate(20, 20); aboutDialog.setLocation(loc); aboutDialog.setVisible(true); } }); } return aboutMenuItem; } /** * This method initializes aboutDialog * * @return javax.swing.JDialog */ private JDialog getAboutDialog() { if (aboutDialog == null) { aboutDialog = new JDialog(getJFrame(), true); aboutDialog.setTitle("About"); aboutDialog.setContentPane(getAboutContentPane()); } return aboutDialog; } /** * This method initializes aboutContentPane * * @return javax.swing.JPanel */ private JPanel getAboutContentPane() { if (aboutContentPane == null) { aboutContentPane = new JPanel(); aboutContentPane.setLayout(new BorderLayout()); aboutContentPane.add(getAboutVersionLabel(), BorderLayout.CENTER); } return aboutContentPane; } /** * This method initializes aboutVersionLabel * * @return javax.swing.JLabel */ private JLabel getAboutVersionLabel() { if (aboutVersionLabel == null) { aboutVersionLabel = new JLabel(); aboutVersionLabel.setText("Version 1.0"); aboutVersionLabel.setHorizontalAlignment(SwingConstants.CENTER); } return aboutVersionLabel; } private void beforeClose() { WindowsHotKey.removeAllHotkey(); System.exit(0); } }

OK,打完,收工。

源代码下载点:http://download.csdn.net/source/2021874

实现一个鼠标自动按键程序相关推荐

  1. VBNet WinForm如何开发一个照片自动排版程序

    想要开发一个照片自动排版程序要熟悉一下几个知识点: System.Drawing.Printing.PrintDocument.Print涉及到的纸张设置是英寸相关,我们常用的长度单位是毫米,那么先需 ...

  2. python鼠标绘图_python 基于opencv 实现一个鼠标绘图小程序

    需求 在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换.左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图. 实现思想 用鼠标画图:需要定义鼠标的回调函数mouse_event 画圆 ...

  3. WinFrom、C# 学习记录五 开发一个鼠标自动点击小软件

    一.说明 经常会被问到需要点击软件的,主要都是玩游戏的盆友,但是也有其它用途的.所以简单弄了一个,打算每当有时间,有需求,就加一些小功能. 这里主要是要记录一下相关开发工作,也记录一些使用/更新的信息 ...

  4. 菜鸟实习——如何做一个PHP自动安装程序install.php

    公司有很多个网站都需要使用留言功能,但目前还没时间写后台,就写了一个简易版的留言板,先顶一阵子,但想着网站在不同服务器上,每次去操作不同的数据库有点难受,于是想做一个像WP和DZ一样自动安装的程序,于 ...

  5. opencv 实现一个鼠标绘图小程序

    需求 在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换.左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图. 实现思想 用鼠标画图:需要定义鼠标的回调函数mouse_event 画圆 ...

  6. 快速开发一个三维自动建模程序:自动建模+后端服务+3D Tiles

    开发一个自己的三维建模工具 坐标成都,疫情+高温,出不了门,闲来无聊,给大家分享一个简单的自动化建模实现方案. 要求:通过后端服务实现,输出3DTiles切片 实现思路 开发一个自己的三维建模工具 一 ...

  7. 怎样用 Python 写一个股票自动交易程序呢?

    如果是网址都没有给出怎么测试呢? 这个应该是服务器生成的token吧,可以urllib2抓一下,如果抓不到的话那么他可能用的js动态加载,这个得分析js源码了,如果他用了flash来算出这个值的. 像 ...

  8. python实现自动按键_Python使用pyautogui模块实现自动化鼠标和键盘操作示例

    本文实例讲述了Python使用pyautogui模块实现自动化鼠标和键盘操作.分享给大家供大家参考,具体如下: 一.pyautogui模块简要说明 ## 使用 pyautogui 模块相关函数,可以模 ...

  9. python tkinter、PySide2乱炖,自动连续按键程序,不止自动保存

    (源码在结尾 背景: 许多人在编辑一些文件的时候都没有按下保存的习惯,这就导致了许多"事故"的发生,使呕心沥血的成果付之东流,在我身边也发生了许多这样的事情,令我痛心疾首,而我本人 ...

最新文章

  1. 设置grep高亮显示匹配项
  2. 【408预推免复习】计算机网络(谢希仁第七版)第五章——运输层
  3. java中删除sqlite数据库语句_sqlite数据库的介绍与java操作sqlite的实例讲解
  4. mybatis报错,找不到对应mapper文件
  5. C++新手之详细介绍MFC
  6. axure操作回复_Axure8.0基础教程(31-40)新手必须掌握的基础操作
  7. Solr5.2.1-Cloud-Zookeeper快速搭建
  8. win98 支持html5,win98支持1G以上内存的解决办法
  9. 计算机中缺少d3dx11_43.dll,韩博士传授win10系统运行软件提示计算机丢失d3dx11_43.dll的处理对策...
  10. Django项目实战——12—(Docker和FastDFS上传和下载文件、浏览器下载并渲染图片(nginx)、录入商品数据和图片数据、首页广告)
  11. java 水晶按钮图片_JAVA GUI 开发---水晶图片按钮
  12. WordPress站点被挂马,如何预防、检测和应对?
  13. 精品微信小程序ssm电影院购票+后台管理系统|前后分离VUE
  14. java并发编程(二十六)——单例模式的双重检查锁模式为什么必须加 volatile?
  15. 中文关键词提取tfidf算法改进bsaeline
  16. 记一次重大的生产事故
  17. MATALB-结构体
  18. 使用抽象类阻止实例化
  19. 结合openCV学习DIP之传统图像特征与匹配
  20. 华为高级产品经理徐洪:高级产品经理的必经之路

热门文章

  1. 拉格朗日插值代码python实现(不掉包)
  2. php如何实现单点登录jira,JIRA 集成 Crowd 实现单点登录
  3. 金蝶K3WISE常用数据表
  4. Android第三方app 微信授权登录
  5. Android事件分发机制详解及解决文案:史上最全面、最易懂
  6. outlook登录企业邮箱和qq邮箱
  7. 通过模拟实验脚本还原阿里巴巴的四个苦逼小朋友抢购月饼现场
  8. 指针进阶·八道笔试题(四)
  9. 微信html字体颜色代码,微信小程序在text文本实现多种字体样式
  10. 能在微信刷淘宝?淘宝可以用微信支付了?