|
|
移动目录或文件到回收站
办公软件WPS的表格:通过ExecuteExcel4Macro调用WinAPI实现
文件操作函数:Shell32.dll:SHFileOperationA
- function 删除目录或文件到回收站测试(){ //文件或目录移入回收站
- const 执行宏调用=ExecuteExcel4Macro;console.clear();
- let 文件名='D:\\abc.txt'; //let 目录名="D:\\def";
- let 文件名字节数=文件名.replace(/[^\x00-\xff]/g,'xx').length;
- let 申请内存字节数=4*8+(文件名字节数+2);
- let 内存句柄=申请本地内存(申请内存字节数);
- console.log("内存句柄:"+内存句柄);
-
- let 内存地址=锁定本地内存(内存句柄);
- 字符串写入内存(文件名,内存地址+32);
- let 删除=3,允许撤销=0x40,无需确认=0x10;
- let 文件操作结构=[0,删除,内存地址+32,0,允许撤销|无需确认,0,0,0];
- 数组写入内存(内存地址,文件操作结构);
- 解锁本地内存(内存句柄);
-
- 内存地址=锁定本地内存(内存句柄);
- let 删除结果=执行宏调用(`CALL("Shell32","SHFileOperationA","JJ",${内存地址})`);
- 解锁本地内存(内存句柄);
-
- 释放本地内存(内存句柄);
- if(!删除结果){console.log("删除成功。");}else{console.log("删除失败!");}
- }
- 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","LocalLock","JJ",${内存句柄})`);
- if(内存地址){
- return 内存地址;
- }else{console.log("未找到内存地址!");}
- }
- function 解锁本地内存(内存句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- 执行宏调用(`CALL("Kernel32","LocalUnlock","JJ",${内存句柄})`); //解锁
- }
- function 申请本地内存(字节数){ //返回内存句柄
- const 执行宏调用=ExecuteExcel4Macro;
- const 内存句柄=执行宏调用(`CALL("Kernel32","LocalAlloc","JJJ",2,${字节数})`);
- if(内存句柄){
- return 内存句柄;
- }else{console.log("未能分配内存!");}
- }
- function 释放本地内存(内存句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- 执行宏调用(`CALL("Kernel32","LocalFree","JJ",${内存句柄})`); //释放内存
- }
复制代码
|
|