JS中通过表对象调用WinAPI

查看 89|回复 10
作者:pctop2026   
执行宏调用.JS
[ol]//执行宏调用ExecuteExcel4Macro
var 表应用对象 = new ActiveXObject("Excel.Application");        //创建表格程序对象
var 表应用 = 表应用对象.Application;        //设置对象变量,以减少引用对象的书写长度
//获取鼠标指针位置
var 鼠标坐标=获取鼠标位置();
var 水平=鼠标坐标[0],垂直=鼠标坐标[1];
//移开鼠标指针
var 新水平=500,新垂直=300;
var 鼠标移动结果=表应用.ExecuteExcel4Macro('CALL("User32","SetCursorPos","AJJ",'+新水平+','+新垂直+')');
var 字符串="表应用对象JS执行宏调用";
var 字符串字节数=表应用.ExecuteExcel4Macro('LENB("'+字符串+'")');
var 字节数计算="字符串:"+字符串+'\t字节数:'+字符串字节数+"\t("+水平+','+垂直+")";
WScript.Echo(字节数计算+"\n设置鼠标位置执行结果:"+鼠标移动结果+'\n按 空格/回车 鼠标指针回到原位');
//弹窗延时后,鼠标指针移回原位
var 延时结果=表应用对象.Application.ExecuteExcel4Macro('CALL("Kernel32","Sleep","JJ",800)');
设置鼠标位置(水平,垂直);
表应用对象.Quit();        //结束应用
WScript.Quit();        //结束脚本
//-----函数-----//
function 获取鼠标位置(){        //返回坐标数组[x,y]
        var 内存地址=申请虚拟内存(8);
        var 结果=表应用.ExecuteExcel4Macro('CALL("User32","GetCursorPos","AJ",'+内存地址+')');        //参数:4+4字节坐标结构
        var 坐标=内存读取数据(内存地址,8);
        释放虚拟内存(内存地址);
        return 坐标;
}
function 设置鼠标位置(水平,垂直){
        var 鼠标移动结果=表应用.ExecuteExcel4Macro('CALL("User32","SetCursorPos","AJJ",'+水平+','+垂直+')');
        return 鼠标移动结果;
}
function 申请虚拟内存(字节数){        //返回内存地址
        var 内存地址=表应用.ExecuteExcel4Macro('CALL("Kernel32","VirtualAlloc","JJJJJ",0,'+字节数+','+0x3000+',4)');
        return 内存地址;
}
function 释放虚拟内存(内存地址){
        表应用.ExecuteExcel4Macro('CALL("Kernel32","VirtualFree","JJJJ",'+内存地址+',0,'+0x8000+')');
}
function 内存读取数据(内存地址,字节数){        //返回数组
        var 偏移,i,读取字节=[],读出数据,数据数组=[];
        for(偏移=i=0;偏移=4){读取字节[i]=4;偏移+=4;}
                else{if(字节数-偏移>=2){读取字节[i]=2;偏移+=2;}
                else{if(字节数-偏移==1){读取字节[i]=1;偏移++;}}}
        }
        for(偏移=i=0;偏移复制代码
优点:不用打开办公软件。
缺点:JScript比较老,不支持ES6语法。调试不太方便。

字节, 鼠标, 内存

cnrting   
厉害,支持支持
liaocwvae   
感谢楼主分享技术
xylqr   
可以,不错
nicebird   
学习到了
liaocwvae   
应用场景是在哪方面的?我完全看不明白。也不好意思问逗包
Windn0   
学习学习了
風的痕迹   
多谢分享!!!
苏半仙儿   
感谢分享
6的
ytalgh   
没有用过,主要啥用途?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部