|
|
暂时没有XP环境了,需要测试一下(自动清理.JS)
本帖最后由 cutebe 于 2026-5-9 13:15 编辑
以下已测试环境 Win7/Win10
- //执行宏调用ExecuteExcel4Macro
- var 表应用 = new ActiveXObject("Excel.Application"); //创建表格程序对象
- var 表程序 = 表应用.Application; //设置对象变量,以减少引用对象的书写长度
- 自动运行清理武器测试();
- 表应用.Quit(); //结束应用
- WScript.Quit(); //结束脚本
- //-----函数-----//
- function 自动运行清理武器测试(){
- var 清理程序文件="D:\\自动清理\\CleanZ.exe"; //软件路径
- var 文件环境 = new ActiveXObject("Scripting.FileSystemObject");
- if(!文件环境.FileExists(清理程序文件)){WScript.Echo("文件不存在。");return;}
- var 标题="清理武器 V1.3 www.zwuqi.com",类="TFormCleanZ"; //软件窗口信息
- var 窗口句柄=0;
- while(!窗口句柄){
- 打开程序(清理程序文件); //===打开程序===//
- 延时(500);
- 窗口句柄=查找窗口(标题,类); //===找到软件窗口===//
- }
- if(窗口句柄){
- //WScript.Echo("窗口句柄:"+窗口句柄);
- //显示窗口信息(窗口句柄); //===句柄标题类===//
- var 扫描按钮文字="扫描",按钮类="TButton";
- var 扫描按钮句柄=下一个子窗口(窗口句柄,0,扫描按钮文字,按钮类);
- 投送点击按钮消息(扫描按钮句柄);
- }
- var 毫秒=500,关闭=0x10;
- while(1){
- 延时(毫秒);
- var 对话框句柄=查找对话框窗口("清理武器");
- if(对话框句柄){
- var 浏览器未关=清理武器对话框检测("清理武器","正在运行中,无法",关闭);
- if(浏览器未关){毫秒=300;/*WScript.Echo("关闭了浏览器提示对话框。");*/}
- var 清理确认=清理武器对话框检测("清理武器","要立即清理这些项目","确定");
- if(清理确认){毫秒=200;/*WScript.Echo("清理确认对话框:确定开始清理!");*/}
- var 完成清理=清理武器对话框检测("清理武器","清理完毕","确定");
- if(完成清理){/*WScript.Echo("确认完成清理对话框。");*/}
- }
- 窗口句柄=查找窗口(标题,类);
- if(完成清理 || (!窗口句柄)){break;}
- //对话框句柄=0;
- }
- 窗口句柄=查找窗口(标题,类); //===找到软件窗口===//
- if(窗口句柄){
- //WScript.Echo("窗口句柄:"+窗口句柄);
- var 退出按钮文字="退出",按钮类="TButton";
- var 退出按钮句柄=下一个子窗口(窗口句柄,0,退出按钮文字,按钮类);
- 投送点击按钮消息(退出按钮句柄);
- 投送关闭窗口消息(窗口句柄);
- }
- }
- function 清理武器对话框检测(标题,部分提示内容,按钮动作){ //显示窗口及子窗口信息
- var 对话框句柄=查找对话框窗口(标题);
- //WScript.Echo("对话框句柄:"+对话框句柄);
- if(!对话框句柄){/*WScript.Echo(标题+"对话框未找到!");*/return 0;}
- var 子窗口基本信息=找子窗口基本信息(对话框句柄,0,0);
- //WScript.Echo("子窗口基本信息("+子窗口基本信息.length+"):"+子窗口基本信息);
- var 子窗口数=子窗口基本信息.length;
- for(var i=0;i<子窗口数;i++){
- if(子窗口基本信息[i][1]==按钮动作 && 子窗口基本信息[i][2]=='Button'){
- var 确定按钮句柄=子窗口基本信息[i][0];
- }else{if(子窗口基本信息[i][1].indexOf(部分提示内容)!=-1 && 子窗口基本信息[i][2]=='Static'){
- var 确认提示句柄=子窗口基本信息[i][0];
- }}
- }
- while(确认提示句柄 && 对话框句柄){
- if(按钮动作==0x10){投送关闭窗口消息(对话框句柄);} //关闭对话框
- else{投送点击按钮消息(确定按钮句柄);} //发送点击按钮消息(确定按钮);
- 对话框句柄=查找对话框窗口(标题);
- }
- if(!对话框句柄 && 确认提示句柄){return 1;}
- }
- function 打开程序(文件路径){
- var 进程句柄=表程序.ExecuteExcel4Macro('CALL("Shell32","ShellExecuteA","JJFFJJJ",0,"open","'+文件路径+'",0,0,1)');
- //if(进程句柄>32){WScript.Echo("程序运行成功。");}else{WScript.Echo("程序打开失败!");}
- }
- function 延时(毫秒){
- 表程序.ExecuteExcel4Macro('CALL("kernel32","Sleep","JJ",'+毫秒+')');
- }
- function 查找窗口(标题,类){ //返回句柄
- var 窗口句柄;
- if(!标题){ //标题为0
- if(!类){窗口句柄=表程序.ExecuteExcel4Macro('CALL("User32","FindWindowA","JJJ",0,0)');} //类为0
- else{窗口句柄=表程序.ExecuteExcel4Macro('CALL("User32","FindWindowA","JFJ","'+类+'",0)');}
- }else{
- if(!类){窗口句柄=表程序.ExecuteExcel4Macro('CALL("User32","FindWindowA","JJF",0,"'+标题+'")');} //类为0
- else{窗口句柄=表程序.ExecuteExcel4Macro('CALL("User32","FindWindowA","JFF","'+类+'","'+标题+'")');}
- }
- return 窗口句柄;
- }
- function 下一个子窗口(父句柄,上个子句柄,标题,类){
- var 子句柄;
- if(标题==0){ //标题为0
- if(类==0){子句柄=表程序.ExecuteExcel4Macro('CALL("User32","FindWindowExA","JJJJJ",'+父句柄+','+上个子句柄+',0,0)'); //类为0
- }else{子句柄=表程序.ExecuteExcel4Macro('CALL("User32","FindWindowExA","JJJFJ",'+父句柄+','+上个子句柄+',"'+类+'",0)');}
- }else{ //有标题
- if(类==0){子句柄=表程序.ExecuteExcel4Macro('CALL("User32","FindWindowExA","JJJJF",'+父句柄+','+上个子句柄+',0,"'+标题+'")');
- }else{子句柄=表程序.ExecuteExcel4Macro('CALL("User32","FindWindowExA","JJJFF",'+父句柄+','+上个子句柄+',"'+类+'","'+标题+'")');}
- }
- return 子句柄;
- }
- function 投送点击按钮消息(按钮句柄){
- var 点击=0xF5;
- 表程序.ExecuteExcel4Macro('CALL("User32","PostMessageA","JJJJJ",'+按钮句柄+','+点击+',0,0)');
- }
- function 投送关闭窗口消息(窗口句柄){
- var 关闭=0x10;
- 表程序.ExecuteExcel4Macro('CALL("User32","PostMessageA","JJJJJ",'+窗口句柄+','+关闭+',0,0)');
- }
- function 查找对话框窗口(标题){
- var 对话框句柄=查找窗口(标题,"#32770"); //对话框类#32770
- return 对话框句柄;
- }
- function 找子窗口基本信息(父句柄,标题,类){ //显示句柄、标题、类
- var 第一个子句柄=下一个子窗口(父句柄,0,标题,类);
- var 子句柄=第一个子句柄,子窗口基本信息=[];
- while(子句柄){
- var 子标题=获取窗口标题(子句柄);
- var 子类名=获取类名(子句柄);
- 子窗口基本信息.push([子句柄,子标题,子类名]);
- 子句柄=下一个子窗口(父句柄,子句柄,标题,类);
- }
- return 子窗口基本信息;
- }
- function 获取窗口标题(窗口句柄){
- var 窗口标题长度=表程序.ExecuteExcel4Macro('CALL("User32","GetWindowTextLengthA","JJ",'+窗口句柄+')');
- var 缓冲区大小=窗口标题长度+1,窗口标题="";
- var 内存地址 = 表程序.ExecuteExcel4Macro('CALL("Kernel32", "VirtualAlloc", "JJJJJ", 0, '+缓冲区大小+', '+0x3000+', 4)'); //申请内存
- var 标题长度=表程序.ExecuteExcel4Macro('CALL("User32", "GetWindowTextA", "JJJJ", '+窗口句柄+','+内存地址+','+窗口标题长度+1+')');
- if(标题长度){窗口标题=内存读取字符串(内存地址);}
- 表程序.ExecuteExcel4Macro('CALL("Kernel32", "VirtualFree", "JJJJ", '+内存地址+', 0, '+0x8000+')'); //释放内存
- return 窗口标题;
- }
- function 获取类名(窗口句柄){
- var 缓冲区大小=256,类名=""; //类名最长255
- var 内存地址=表程序.ExecuteExcel4Macro('CALL("Kernel32","VirtualAlloc","JJJJJ",0,'+缓冲区大小+','+0x3000+',4)'); //申请内存
- var 类名长度=表程序.ExecuteExcel4Macro('CALL("User32","GetClassNameA","JJJJ",'+窗口句柄+','+内存地址+','+缓冲区大小+')');
- if(类名长度){类名=内存读取字符串(内存地址);}
- 表程序.ExecuteExcel4Macro('CALL("Kernel32","VirtualFree","JJJJ",'+内存地址+',0,'+0x8000+')'); //释放内存
- return 类名;
- }
- function 内存读取字符串(内存地址){ //返回字符串
- var 段长度=127;
- var 总字节=表程序.ExecuteExcel4Macro('CALL("Kernel32","lstrlenA","JJ",'+内存地址+')'); //内存文本字节数
- var 偏移字节=0,文本字符串=分段文本='';
- while(偏移字节<总字节){ //返回字符串F。 //返回超255字节时,也需要分段操作
- 分段文本=表程序.ExecuteExcel4Macro('CALL("Kernel32","lstrcpynW","FFJJ","",'+(内存地址+偏移字节)+','+段长度+')');
- 偏移字节+=分段文本.replace(/[^\x00-\xff]/g,'xx').length; //计算字符串字节数
- 文本字符串+=分段文本;
- }
- return 文本字符串;
- }
复制代码 |
评分
-
查看全部评分
|