|
|
办公软件WPS的表格:通过ExecuteExcel4Macro调用WinAPI实现
打开、定位、显示属性
打开目录并定位文件:
- function 打开目录选中文件测试(){
- let 操作="open",程序="explorer";
- let 参数="/select,C:\\Windows\\System32\\cmd.exe";
-
- let 操作字节数=操作.replace(/[^\x00-\xff]/g,'xx').length;
- let 程序字节数=程序.replace(/[^\x00-\xff]/g,'xx').length;
- let 参数字节数=参数.replace(/[^\x00-\xff]/g,'xx').length;
- let 申请内存大小=(操作字节数+1)+(程序字节数+1)+(参数字节数+1);
- let 操作偏移=0,程序偏移=操作字节数+1,参数偏移=程序偏移+(程序字节数+1);
-
- let 内存句柄=申请本地内存(申请内存大小);
- let 内存地址=锁定本地内存(内存句柄);
- 字符串写入内存(操作,内存地址+操作偏移); //写入内存
- 字符串写入内存(程序,内存地址+程序偏移);
- 字符串写入内存(参数,内存地址+参数偏移);
- 解锁本地内存(内存句柄);
-
- let 结构大小=4*15,菜单项=0xC,普通显示=1,显示=5;
- let 程序操作结构=[结构大小,0,0,内存地址,内存地址+程序偏移,内存地址+参数偏移,0,普通显示,0,0,0,0,0,0,0];
- let 操作结果=执行操作(程序操作结构); //===具体操作===//
-
- 释放本地内存(内存句柄);
- }
复制代码
调用函数:
- function 执行操作(执行操作数组){ //打开、定位、编辑、查找、属性、打印等
- const 执行宏调用=ExecuteExcel4Macro;
- let 内存句柄=申请本地内存(4*15); //执行操作结构:4字节*15
- let 内存地址=锁定本地内存(内存句柄);
- 数组写入内存(内存地址,执行操作数组); //===结构参数放到内存===//
- 解锁本地内存(内存句柄);
-
- 内存地址=锁定本地内存(内存句柄);
- let 执行操作结果=执行宏调用(`CALL("Shell32","ShellExecuteExA","AJ",${内存地址})`); //执行操作
- 解锁本地内存(内存句柄);释放本地内存(内存句柄);
- return 执行操作结果;
- }
- function 字符串写入内存(字符串,内存地址){
- const 执行宏调用=ExecuteExcel4Macro;
- let 分段文本=[],分段字节=[],总字节=0,段长度=127;
- for(let 起始=i=0;起始<字符串.length;起始+=段长度,i++){
- 分段文本.push(字符串.slice(起始,起始+段长度));
- 分段字节.push(分段文本[i].replace(/[^\x00-\xff]/g,'xx').length); //一汉字占俩字节
- 总字节+=分段字节[i];
- }
- for(let 偏移字节=i=0;i<分段文本.length;i++){ //内存使用限长,字符串分批复制
- 执行宏调用(`CALL("Kernel32","lstrcpynW","JJFJ",${内存地址+偏移字节},"${分段文本[i].replace(/"/g,'""')}",${分段字节[i]})`);
- 偏移字节+=分段字节[i];
- }
- }
- function 数组写入内存(内存地址,数组){
- const 执行宏调用=ExecuteExcel4Macro,写入字节=4;
- for(let 偏移=i=0;i<数组.length;i++){ //写入
- 执行宏调用(`CALL("Kernel32","RtlMoveMemory","2JNJ",${内存地址+偏移},${数组[i]},${写入字节})`);
- 偏移+=写入字节;
- }
- }
- function 申请本地内存(字节数){ //返回内存句柄
- const 执行宏调用=ExecuteExcel4Macro;
- const 内存句柄=执行宏调用(`CALL("Kernel32","LocalAlloc","JJJ",2,${字节数})`);
- if(内存句柄){
- return 内存句柄;
- }else{console.log("未能分配内存!");}
- }
- function 释放本地内存(内存句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- 执行宏调用(`CALL("Kernel32","LocalFree","JJ",${内存句柄})`); //释放内存
- }
- function 锁定本地内存(内存句柄){ //返回内存地址
- const 执行宏调用=ExecuteExcel4Macro;
- const 内存地址=执行宏调用(`CALL("Kernel32","LocalLock","JJ",${内存句柄})`);
- if(内存地址){
- return 内存地址;
- }else{console.log("未找到内存地址!");}
- }
- function 解锁本地内存(内存句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- 执行宏调用(`CALL("Kernel32","LocalUnlock","JJ",${内存句柄})`); //解锁
- }
复制代码
|
|