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

办公软件WPS的JSA中删除文件入回收站

[复制链接]
发表于 4 天前 | 显示全部楼层 |阅读模式

移动目录或文件到回收站

办公软件WPS的表格:通过ExecuteExcel4Macro调用WinAPI实现


文件操作函数:Shell32.dll:SHFileOperationA
  1. function 删除目录或文件到回收站测试(){        //文件或目录移入回收站
  2.         const 执行宏调用=ExecuteExcel4Macro;console.clear();
  3.         let 文件名='D:\\abc.txt';        //let 目录名="D:\\def";
  4.         let 文件名字节数=文件名.replace(/[^\x00-\xff]/g,'xx').length;
  5.         let 申请内存字节数=4*8+(文件名字节数+2);
  6.         let 内存句柄=申请本地内存(申请内存字节数);
  7.         console.log("内存句柄:"+内存句柄);
  8.        
  9.         let 内存地址=锁定本地内存(内存句柄);
  10.         字符串写入内存(文件名,内存地址+32);
  11.         let 删除=3,允许撤销=0x40,无需确认=0x10;
  12.         let 文件操作结构=[0,删除,内存地址+32,0,允许撤销|无需确认,0,0,0];
  13.         数组写入内存(内存地址,文件操作结构);
  14.         解锁本地内存(内存句柄);
  15.        
  16.         内存地址=锁定本地内存(内存句柄);
  17.         let 删除结果=执行宏调用(`CALL("Shell32","SHFileOperationA","JJ",${内存地址})`);
  18.         解锁本地内存(内存句柄);
  19.        
  20.         释放本地内存(内存句柄);
  21.         if(!删除结果){console.log("删除成功。");}else{console.log("删除失败!");}
  22. }

  23. function 字符串写入内存(字符串,内存地址){
  24.         const 执行宏调用=ExecuteExcel4Macro;
  25.         let 分段文本=[],分段字节=[],总字节=0,段长度=127;
  26.         for(let 起始=i=0;起始<字符串.length;起始+=段长度,i++){
  27.                 分段文本.push(字符串.slice(起始,起始+段长度));
  28.                 分段字节.push(分段文本[i].replace(/[^\x00-\xff]/g,'xx').length);        //一汉字占俩字节
  29.                 总字节+=分段字节[i];
  30.         }
  31.         for(let 偏移字节=i=0;i<分段文本.length;i++){        //内存使用限长,字符串分批复制
  32.                 执行宏调用(`CALL("Kernel32","lstrcpynW","JJFJ",${内存地址+偏移字节},"${分段文本[i].replace(/"/g,'""')}",${分段字节[i]})`);
  33.                 偏移字节+=分段字节[i];
  34.         }
  35. }
  36. function 数组写入内存(内存地址,数组){
  37.         const 执行宏调用=ExecuteExcel4Macro,写入字节=4;
  38.         for(let 偏移=i=0;i<数组.length;i++){        //写入
  39.                 执行宏调用(`CALL("Kernel32","RtlMoveMemory","2JNJ",${内存地址+偏移},${数组[i]},${写入字节})`);
  40.                 偏移+=写入字节;
  41.         }
  42. }
  43. function 锁定本地内存(内存句柄){        //返回内存地址
  44.         const 执行宏调用=ExecuteExcel4Macro;
  45.         const 内存地址=执行宏调用(`CALL("Kernel32","LocalLock","JJ",${内存句柄})`);
  46.         if(内存地址){
  47.                 return 内存地址;
  48.         }else{console.log("未找到内存地址!");}
  49. }
  50. function 解锁本地内存(内存句柄){
  51.         const 执行宏调用=ExecuteExcel4Macro;
  52.         执行宏调用(`CALL("Kernel32","LocalUnlock","JJ",${内存句柄})`);        //解锁
  53. }
  54. function 申请本地内存(字节数){        //返回内存句柄
  55.         const 执行宏调用=ExecuteExcel4Macro;
  56.         const 内存句柄=执行宏调用(`CALL("Kernel32","LocalAlloc","JJJ",2,${字节数})`);
  57.         if(内存句柄){
  58.                 return 内存句柄;
  59.         }else{console.log("未能分配内存!");}
  60. }
  61. function 释放本地内存(内存句柄){
  62.         const 执行宏调用=ExecuteExcel4Macro;
  63.         执行宏调用(`CALL("Kernel32","LocalFree","JJ",${内存句柄})`);        //释放内存
  64. }
复制代码

发表于 4 天前 | 显示全部楼层
楼主是代码 达人

评分

参与人数 1无忧币 +5 收起 理由
yyz2191958 + 5

查看全部评分

回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
不怎么看得明白
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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