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

[转载代码] 办公软件WPS的JSA中读取库文件的字符串资源

[复制链接]
发表于 昨天 21:52 | 显示全部楼层 |阅读模式
本帖最后由 cutebe 于 2026-4-30 21:56 编辑

模仿以下贴子写一个:        办公软件WPS的JSA中,读取.DLL库文件的字符串资源
PowerShell怎么读取dll文件中的字符串?

  1. function 读取库文件的字符串资源测试(){
  2.         //对应字符串:需要管理员特权        //@%SystemRoot%\System32\ActionCenterCPL.dll,-6
  3.         let 库与字符串资源代号="@%SystemRoot%\\System32\\ActionCenterCPL.dll,-6";
  4.         let 库文件="C:\\Windows\\System32\\ActionCenterCPL.dll";        //@要去除,变量%SystemRoot%要转为实际值
  5.         let 字符串代号=6;        //代号是正数,要去掉符号。代号还可以是1,2,3,……
  6.         console.clear();
  7.         let 模块句柄=以数据方式加载库(库文件);
  8.         console.log("模块句柄:"+模块句柄);
  9.         let 字符串=读取库中字符串资源(模块句柄,字符串代号);
  10.         console.log("读取动态库文件中的字符串资源:\n"+库与字符串资源代号+"\n读出字符串:"+字符串)
  11.         释放库(模块句柄);
  12. }

  13. function 以数据方式加载库(库文件){
  14.         let 数据方式=0x2;
  15.         const 执行宏调用=ExecuteExcel4Macro;
  16.         let 模块句柄=执行宏调用(`CALL("Kernel32","LoadLibraryExA","JFJJ","${库文件}",0,${数据方式})`);
  17.         if(!模块句柄){console.log("错误代码:"+执行宏调用(`CALL("Kernel32","GetLastError","I")`));}
  18.         return 模块句柄;
  19. }
  20. function 读取库中字符串资源(模块句柄,字符串代号){
  21.         const 执行宏调用=ExecuteExcel4Macro;
  22.         let 字节数=255;
  23.         let 内存地址=申请虚拟内存(字节数+1);
  24.         let 字符串长度=执行宏调用(`CALL("User32","LoadStringA","JJJJJ",${模块句柄},${字符串代号},${内存地址},${字节数})`);
  25.         let 字符串=内存读取字符串(内存地址);
  26.         释放虚拟内存(内存地址);
  27.         return 字符串;
  28. }
  29. function 读取库中字符串资源二(模块句柄,字符串代号){
  30.         const 执行宏调用=ExecuteExcel4Macro;
  31.         let 字符串字节数=255;
  32.         let 内存地址=申请虚拟内存(字符串字节数+1);
  33.         let 字符串=执行宏调用(`CALL("User32","LoadStringA","3JJFJ",${模块句柄},${字符串代号},${内存地址},${字符串字节数})`);
  34.         释放虚拟内存(内存地址);
  35.         return 字符串;
  36. }
  37. function 释放库(模块句柄){
  38.         const 执行宏调用=ExecuteExcel4Macro;
  39.         let 结果=执行宏调用(`CALL("Kernel32","FreeLibrary","AJ",${模块句柄})`);
  40.         return 结果;
  41. }
  42. function 内存读取字符串(内存地址){        //返回字符串
  43.         const 执行宏调用=ExecuteExcel4Macro,段长度=127;
  44.         const 总字节=执行宏调用(`CALL("Kernel32","lstrlenA","JJ",${内存地址})`);        //内存文本字节数
  45.         let 偏移字节=0,文本字符串=分段文本='';
  46.         while(偏移字节<总字节){        //返回字符串F。        //返回超255字节时,也需要分段操作
  47.                 分段文本=执行宏调用(`CALL("Kernel32","lstrcpynW","FFJJ","",${内存地址+偏移字节},${段长度})`);
  48.                 偏移字节+=分段文本.replace(/[^\x00-\xff]/g,'xx').length;        //计算字符串字节数
  49.                 文本字符串+=分段文本;
  50.         }
  51.         return 文本字符串;
  52. }
  53. function 申请虚拟内存(字节数){        //返回内存地址
  54.         const 执行宏调用=ExecuteExcel4Macro;
  55.         const 内存地址=执行宏调用(`CALL("Kernel32","VirtualAlloc","JJJJJ",0,${字节数},${0x3000},4)`);
  56.         return 内存地址;
  57. }
  58. function 释放虚拟内存(内存地址){
  59.         const 执行宏调用=ExecuteExcel4Macro;
  60.         执行宏调用(`CALL("Kernel32","VirtualFree","JJJJ",${内存地址},0,${0x8000})`);
  61. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-1 00:11

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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