找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 563|回复: 12

JS中通过表对象调用WinAPI

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式
执行宏调用.JS
  1. //执行宏调用ExecuteExcel4Macro
  2. var 表应用对象 = new ActiveXObject("Excel.Application");        //创建表格程序对象
  3. var 表应用 = 表应用对象.Application;        //设置对象变量,以减少引用对象的书写长度

  4. //获取鼠标指针位置
  5. var 鼠标坐标=获取鼠标位置();
  6. var 水平=鼠标坐标[0],垂直=鼠标坐标[1];

  7. //移开鼠标指针
  8. var 新水平=500,新垂直=300;
  9. var 鼠标移动结果=表应用.ExecuteExcel4Macro('CALL("User32","SetCursorPos","AJJ",'+新水平+','+新垂直+')');
  10. var 字符串="表应用对象JS执行宏调用";
  11. var 字符串字节数=表应用.ExecuteExcel4Macro('LENB("'+字符串+'")');
  12. var 字节数计算="字符串:"+字符串+'\t字节数:'+字符串字节数+"\t("+水平+','+垂直+")";
  13. WScript.Echo(字节数计算+"\n设置鼠标位置执行结果:"+鼠标移动结果+'\n按 空格/回车 鼠标指针回到原位');

  14. //弹窗延时后,鼠标指针移回原位
  15. var 延时结果=表应用对象.Application.ExecuteExcel4Macro('CALL("Kernel32","Sleep","JJ",800)');
  16. 设置鼠标位置(水平,垂直);

  17. 表应用对象.Quit();        //结束应用
  18. WScript.Quit();        //结束脚本


  19. //-----函数-----//
  20. function 获取鼠标位置(){        //返回坐标数组[x,y]
  21.         var 内存地址=申请虚拟内存(8);
  22.         var 结果=表应用.ExecuteExcel4Macro('CALL("User32","GetCursorPos","AJ",'+内存地址+')');        //参数:4+4字节坐标结构
  23.         var 坐标=内存读取数据(内存地址,8);
  24.         释放虚拟内存(内存地址);
  25.         return 坐标;
  26. }
  27. function 设置鼠标位置(水平,垂直){
  28.         var 鼠标移动结果=表应用.ExecuteExcel4Macro('CALL("User32","SetCursorPos","AJJ",'+水平+','+垂直+')');
  29.         return 鼠标移动结果;
  30. }
  31. function 申请虚拟内存(字节数){        //返回内存地址
  32.         var 内存地址=表应用.ExecuteExcel4Macro('CALL("Kernel32","VirtualAlloc","JJJJJ",0,'+字节数+','+0x3000+',4)');
  33.         return 内存地址;
  34. }
  35. function 释放虚拟内存(内存地址){
  36.         表应用.ExecuteExcel4Macro('CALL("Kernel32","VirtualFree","JJJJ",'+内存地址+',0,'+0x8000+')');
  37. }
  38. function 内存读取数据(内存地址,字节数){        //返回数组
  39.         var 偏移,i,读取字节=[],读出数据,数据数组=[];
  40.         for(偏移=i=0;偏移<字节数;i++){
  41.                 if(字节数-偏移>=4){读取字节[i]=4;偏移+=4;}
  42.                 else{if(字节数-偏移>=2){读取字节[i]=2;偏移+=2;}
  43.                 else{if(字节数-偏移==1){读取字节[i]=1;偏移++;}}}
  44.         }
  45.         for(偏移=i=0;偏移<字节数;i++){        //库Kernel32.dll和NtDll.dll里都有RtlMoveMemory        //读出
  46.                 读出数据=表应用.ExecuteExcel4Macro('CALL("Kernel32","RtlMoveMemory","1NJJ",'+内存地址+','+(内存地址+偏移)+','+读取字节[i]+')');
  47.                 偏移+=读取字节[i];数据数组[i]=读出数据;
  48.         }
  49.         return 数据数组;        //返回
  50. }
复制代码

优点:不用打开办公软件。
缺点:JScript比较老,不支持ES6语法。调试不太方便。

发表于 6 天前 | 显示全部楼层
厉害,支持支持
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
感谢楼主分享技术
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
可以,不错
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
学习到了
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
应用场景是在哪方面的?我完全看不明白。也不好意思问逗包

点评

办公自动化:有些软件没有导入功能。这个用来填表之类的  发表于 6 天前
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
学习学习了
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
多谢分享!!!
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
感谢分享
6的
回复

使用道具 举报

发表于 5 天前 | 显示全部楼层
没有用过,主要啥用途?

点评

重复操作自动完成  发表于 5 天前
回复

使用道具 举报

发表于 5 天前 来自手机 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-5-13 06:30

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表