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

[转载代码] 办公软件WPS的JSA中获取窗口程序名

[复制链接]
发表于 昨天 16:26 | 显示全部楼层 |阅读模式
办公软件WPS的表格:通过ExecuteExcel4Macro调用WinAPI实现

获取鼠标指向窗口的程序文件名:
  1. function 鼠标指向窗口所属程序测试(){
  2.         let 窗口句柄=鼠标所指窗口句柄();
  3.         console.clear();
  4.         let 路径程序名=窗口获取路径程序名(窗口句柄);
  5.         console.log("窗口句柄:"+窗口句柄+"\n路径程序名:"+路径程序名);
  6. }
复制代码


用到的函数:
  1. function 鼠标所指窗口句柄(){        //返回窗口句柄
  2.         const 执行宏调用=ExecuteExcel4Macro;
  3.         let 鼠标指针坐标=获取鼠标位置();        //===调用函数===/
  4.         let 水平=鼠标指针坐标[0],垂直=鼠标指针坐标[1];        //鼠标指针处窗口句柄        //扩展了一个参数
  5.         let 窗口句柄=执行宏调用(`CALL("User32", "WindowFromPoint", "JJJ", ${水平},${垂直})`);
  6.         return 窗口句柄;
  7. }
  8. function 获取鼠标位置(){        //返回坐标数组[x,y]
  9.         const 执行宏调用=ExecuteExcel4Macro;
  10.         var 坐标结构=执行宏调用(`CALL("User32","GetCursorPos","1E",0)`);        //参数:4+4字节坐标结构
  11.         const 缓冲区=new ArrayBuffer(8); //8字节对应64位
  12.         const 数据操作=new DataView(缓冲区);        //操作对象
  13.         数据操作.setFloat64(0,坐标结构);        //(操作)写入64位数
  14.         let 坐标=[];
  15.         坐标[0]=数据操作.getInt32(4);        //取32位坐标x
  16.         坐标[1]=数据操作.getInt32(0);        //取32位坐标y
  17.         return 坐标;
  18. }

  19. function 窗口获取路径程序名(窗口句柄){
  20.         let 进程号=获取窗口进程(窗口句柄);
  21.         let 进程句柄=打开进程(进程号);
  22.         let 进程路径程序名=获取进程路径文件名(进程句柄);
  23.         关闭进程(进程句柄);
  24.         return 进程路径程序名;
  25. }
  26. function 获取窗口进程(窗口句柄){        //进程
  27.         const 执行宏调用=ExecuteExcel4Macro;
  28.         let 进程号=执行宏调用(`CALL("User32","GetWindowThreadProcessId","2JN",${窗口句柄},0)`);        //第2个参数
  29.         return 进程号;
  30. }
  31. function 打开进程(进程号){        //返回进程句柄
  32.         const 执行宏调用=ExecuteExcel4Macro;
  33.         let 进程查询=0x400,进程读取=0x10;
  34.         let 访问权限=进程查询|进程读取,不继承=0;
  35.         let 进程句柄=执行宏调用(`CALL("Kernel32","OpenProcess","JJAJ",${访问权限},${不继承},${进程号})`);
  36.         return 进程句柄;
  37. }
  38. function 关闭进程(进程句柄){
  39.         const 执行宏调用=ExecuteExcel4Macro;
  40.         let 关闭结果=执行宏调用(`CALL("Kernel32","CloseHandle","AJ",${进程句柄})`);
  41.         return 关闭结果;        //成功返回true
  42. }
  43. function 获取进程路径文件名(进程句柄){        //进程
  44.         const 执行宏调用=ExecuteExcel4Macro;
  45.         let 内存地址=申请虚拟内存(4);        //Psapi.dll或Kernel32.dll        //${内存地址}
  46.         let 路径文件名=执行宏调用(`CALL("Kernel32","QueryFullProcessImageNameA","3JJFN",${进程句柄},0,"",${内存地址})`);
  47.         释放虚拟内存(内存地址);        //内存中存的是路径文件名长度
  48.         return 路径文件名;
  49. }
  50. function 申请虚拟内存(字节数){        //返回内存地址
  51.         const 执行宏调用=ExecuteExcel4Macro;
  52.         const 内存地址=执行宏调用(`CALL("Kernel32","VirtualAlloc","JJJJJ",0,${字节数},${0x3000},4)`);
  53.         return 内存地址;
  54. }
  55. function 释放虚拟内存(内存地址){
  56.         const 执行宏调用=ExecuteExcel4Macro;
  57.         执行宏调用(`CALL("Kernel32","VirtualFree","JJJJ",${内存地址},0,${0x8000})`);
  58. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-7-14 07:48

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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