|
|
执行宏调用.JS
- //执行宏调用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;偏移<字节数;i++){
- if(字节数-偏移>=4){读取字节[i]=4;偏移+=4;}
- else{if(字节数-偏移>=2){读取字节[i]=2;偏移+=2;}
- else{if(字节数-偏移==1){读取字节[i]=1;偏移++;}}}
- }
- for(偏移=i=0;偏移<字节数;i++){ //库Kernel32.dll和NtDll.dll里都有RtlMoveMemory //读出
- 读出数据=表应用.ExecuteExcel4Macro('CALL("Kernel32","RtlMoveMemory","1NJJ",'+内存地址+','+(内存地址+偏移)+','+读取字节[i]+')');
- 偏移+=读取字节[i];数据数组[i]=读出数据;
- }
- return 数据数组; //返回
- }
复制代码 |
|