|
|
办公软件WPS的表格:通过ExecuteExcel4Macro调用WinAPI实现
获取鼠标指向窗口的程序文件名:
- function 鼠标指向窗口所属程序测试(){
- let 窗口句柄=鼠标所指窗口句柄();
- console.clear();
- let 路径程序名=窗口获取路径程序名(窗口句柄);
- console.log("窗口句柄:"+窗口句柄+"\n路径程序名:"+路径程序名);
- }
复制代码
用到的函数:
- function 鼠标所指窗口句柄(){ //返回窗口句柄
- const 执行宏调用=ExecuteExcel4Macro;
- let 鼠标指针坐标=获取鼠标位置(); //===调用函数===/
- let 水平=鼠标指针坐标[0],垂直=鼠标指针坐标[1]; //鼠标指针处窗口句柄 //扩展了一个参数
- let 窗口句柄=执行宏调用(`CALL("User32", "WindowFromPoint", "JJJ", ${水平},${垂直})`);
- return 窗口句柄;
- }
- function 获取鼠标位置(){ //返回坐标数组[x,y]
- const 执行宏调用=ExecuteExcel4Macro;
- var 坐标结构=执行宏调用(`CALL("User32","GetCursorPos","1E",0)`); //参数:4+4字节坐标结构
- const 缓冲区=new ArrayBuffer(8); //8字节对应64位
- const 数据操作=new DataView(缓冲区); //操作对象
- 数据操作.setFloat64(0,坐标结构); //(操作)写入64位数
- let 坐标=[];
- 坐标[0]=数据操作.getInt32(4); //取32位坐标x
- 坐标[1]=数据操作.getInt32(0); //取32位坐标y
- return 坐标;
- }
- function 窗口获取路径程序名(窗口句柄){
- let 进程号=获取窗口进程(窗口句柄);
- let 进程句柄=打开进程(进程号);
- let 进程路径程序名=获取进程路径文件名(进程句柄);
- 关闭进程(进程句柄);
- return 进程路径程序名;
- }
- function 获取窗口进程(窗口句柄){ //进程
- const 执行宏调用=ExecuteExcel4Macro;
- let 进程号=执行宏调用(`CALL("User32","GetWindowThreadProcessId","2JN",${窗口句柄},0)`); //第2个参数
- return 进程号;
- }
- function 打开进程(进程号){ //返回进程句柄
- const 执行宏调用=ExecuteExcel4Macro;
- let 进程查询=0x400,进程读取=0x10;
- let 访问权限=进程查询|进程读取,不继承=0;
- let 进程句柄=执行宏调用(`CALL("Kernel32","OpenProcess","JJAJ",${访问权限},${不继承},${进程号})`);
- return 进程句柄;
- }
- function 关闭进程(进程句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- let 关闭结果=执行宏调用(`CALL("Kernel32","CloseHandle","AJ",${进程句柄})`);
- return 关闭结果; //成功返回true
- }
- function 获取进程路径文件名(进程句柄){ //进程
- const 执行宏调用=ExecuteExcel4Macro;
- let 内存地址=申请虚拟内存(4); //Psapi.dll或Kernel32.dll //${内存地址}
- let 路径文件名=执行宏调用(`CALL("Kernel32","QueryFullProcessImageNameA","3JJFN",${进程句柄},0,"",${内存地址})`);
- 释放虚拟内存(内存地址); //内存中存的是路径文件名长度
- return 路径文件名;
- }
- function 申请虚拟内存(字节数){ //返回内存地址
- const 执行宏调用=ExecuteExcel4Macro;
- const 内存地址=执行宏调用(`CALL("Kernel32","VirtualAlloc","JJJJJ",0,${字节数},${0x3000},4)`);
- return 内存地址;
- }
- function 释放虚拟内存(内存地址){
- const 执行宏调用=ExecuteExcel4Macro;
- 执行宏调用(`CALL("Kernel32","VirtualFree","JJJJ",${内存地址},0,${0x8000})`);
- }
复制代码 |
|