找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 71|回复: 2

[转载代码] JS中通过表对象调用WinAPI

[复制链接]
发表于 昨天 22:50 | 显示全部楼层 |阅读模式
执行宏调用.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. }
复制代码
 楼主| 发表于 昨天 22:51 | 显示全部楼层
本帖最后由 cutebe 于 2026-5-7 08:00 编辑

优点:不用打开办公软件。
缺点:JScript比较老,不支持ES6语法。调试不太方便。
发表于 1 小时前 | 显示全部楼层
不打开WPS和编辑器,怎么执行呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-5-7 19:05

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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