脚本精灵实现
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
首先通过 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++
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于