java 模拟脚本精灵

本贴最后更新于 1808 天前,其中的信息可能已经水流花落

脚本精灵实现

RunApp "E:\xx.exe"
//查找退出所在位置
FindPic 0,0,1920,1080,"Attachment:\exit.bmp",0.5,intX,intY
//如果找到退出的位置
If intX > 0 And intY > 0 Then
//将鼠标移动到该位置
MoveTo intX, intY
//点击退出所在位置
LeftClick 1
//延时2秒
Delay 2000
//点击回车,确定退出
KeyPress "Enter", 1
End If
//运行程序
RunApp "E:\xx.exe"
//查找开启服务所在位置
FindPic 0,0,1920,1080,"Attachment:\start.bmp",0.5,intX,intY
//如果找到开启服务的位置
If intX > 0 And intY > 0 Then 
//将鼠标移动到该位置
MoveTo intX, intY
//点击开启服务所在位置
LeftClick 1
End If
//延时2秒
Delay 2000
//回到桌面
KeyDown 91, 1
KeyPress 68, 1
KeyUp 91, 1
//延时10秒
Delay 10000
RunApp "E:\xx.exe"
EndScript

而脚本精灵不能断网运行
所以使用 java 这是需要的 jar
image.png

首先通过 spy++ 获取到应用程序的窗口标题
然后放代码

    private static WinDef.RECT initalizeApp(String appPath, String exeTitle) {
        // 获取exeTitle程序句柄
        User32 user32 = User32.INSTANCE;
        HWND hwnd = user32.FindWindow(null, exeTitle);
        if (hwnd == null) {
            // 启动程序
            RuntimeUtil.exec(appPath);
            ThreadUtil.sleep(2000);
        }
        //重新查找程序句柄
        hwnd = user32.FindWindow(null, exeTitle);
        if (hwnd == null) {
            logger.error(DateUtil.now() + exeTitle + "---程序未运行");
            System.exit(0);
        }

        // 获取工具栏父级句柄
        HWND tdxDockControl = user32.FindWindowEx(hwnd, null, "TdxDockControl", null);
        if (tdxDockControl == null) {
            logger.info(DateUtil.now() + "tdxDockControl 对象获取失败");
            System.exit(0);
        }
        // 获取工具栏句柄
        HWND tdxBarControl = user32.FindWindowEx(tdxDockControl, null, "TdxBarControl", null);
        if (tdxBarControl == null) {
            logger.info(DateUtil.now() + "tdxBarControl  对象获取失败");
            System.exit(0);
        }
        WinDef.RECT Bar_RECT = getRECT(user32, hwnd, tdxBarControl);

        return Bar_RECT;
    }
   private static WinDef.RECT getRECT(User32 user32, HWND hwnd, HWND tdxBarControl) {
        // 打开窗口
        user32.ShowWindow(tdxBarControl, 9);
        // 切换窗口到最前
        user32.SetForegroundWindow(tdxBarControl);
        // 获取hwnd前台窗口
        WinDef.RECT hwnd_RECT = new WinDef.RECT();
        user32.GetWindowRect(hwnd, hwnd_RECT);
        // 获取bar前台窗口
        WinDef.RECT Bar_RECT = new WinDef.RECT();
        user32.GetWindowRect(tdxBarControl, Bar_RECT);
        return Bar_RECT;
    }
 public static void main(String[] args) {
        // 读取classpath下的config目录下的XXX.setting,不使用变量
        Setting setting = new Setting("config.setting");
        String appPath = setting.getStr("appPath");
        String exeTitle = setting.getStr("exeTitle");
        String otherApp = setting.getStr("otherApp");
        String otherAppPath = setting.getStr("otherAppPath");
        // 初始化程序,并获取工具栏尺寸
        WinDef.RECT Bar_RECT = initalizeApp(appPath, exeTitle);
        // 获取退出按钮尺寸
        int exit_width = (Bar_RECT.right - Bar_RECT.left) * 7 / 8 + Bar_RECT.left;
        int exit_height = (Bar_RECT.bottom - Bar_RECT.top) / 2 + Bar_RECT.top;
        // 获取开始服务按钮尺寸
        int start_width = (Bar_RECT.right - Bar_RECT.left) * 5 / 8 + Bar_RECT.left;
        int start_height = (Bar_RECT.bottom - Bar_RECT.top) / 2 + Bar_RECT.top;
        // 调用机器人第一次退出程序
        RobotUtil.mouseMove(exit_width, exit_height);
        RobotUtil.click();
        //键盘回车
        RobotUtil.keyClick(KeyEvent.VK_ENTER);
        ThreadUtil.sleep(5000);
        // 第二次初始化程序,并获取工具栏尺寸
        Bar_RECT = initalizeApp(appPath, exeTitle);
        // 调用机器人第二次开启服务
        RobotUtil.mouseMove(start_width, start_height);
        RobotUtil.click();
        //显示桌面
        RobotUtil.keyPressWithCtrl(KeyEvent.VK_D);
        //判断是否启动第三方程序
        if("true".equals(otherApp)) {
            ThreadUtil.sleep(5000);
            RuntimeUtil.exec(otherAppPath);
        }
    }

最后把它打包成一个 exe 文件放开机自启里

spy++ 下载地址:spy++

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
1 操作
windvibra 在 2019-12-10 10:52:35 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
windvibra
3 号黑客成员, 2012-11-24 加入 郑州

推荐标签 标签

  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 129 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    176 引用 • 815 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 700 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 391 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 670 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 611 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    27 引用 • 225 回帖 • 170 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 724 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 22 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 474 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    351 引用 • 1813 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 641 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 154 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • OnlyOffice
    4 引用 • 2 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 1 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 362 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 1 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 786 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    132 引用 • 189 回帖