|
|
办公软件WPS的表格:通过ExecuteExcel4Macro调用WinAPI实现
- function 读取库文件的字符串资源测试(){
- console.clear(); //对应字符串:更改操作中心设置
- var 库与字符串资源代号="@%SystemRoot%\\System32\\ActionCenterCPL.dll,-8";
- //var 库与字符串资源代号="@C:\\Windows\\System32\\speech\\speechux\\sapi.cpl,-5555";
- let 文件路径编号=库文件字符串代号(库与字符串资源代号); //===转换环境变量===//
- let 库文件=文件路径编号[0],字符串代号=文件路径编号[1]; //正数代号。可以是1,2,3,……
-
- let 模块句柄=以数据方式加载库(库文件);
- let 字符串=读取库中字符串资源(模块句柄,字符串代号);
- 释放库(模块句柄);
- console.log(字符串+"\n"+库与字符串资源代号); //显示字符串
- }
- function 库文件字符串代号(注册表字符串){ //返回数组[库文件路径,字符串编号]
- let 路径编号=注册表字符串.split(",");
- let 库环境路径=路径编号[0],字符串编号=Math.abs(路径编号[1]);
- if(库环境路径.slice(0,2)=="@%" || 库环境路径.match(/@[a-zA-z]:\\/)!=null){
- 库环境路径=库环境路径.slice(1); //去除首字符@
- }
- if(库环境路径.match(/%(.*?)%/)!=null){ //有系统环境变量时转为路径
- let 环境变量=库环境路径.match(/%(.*?)%/)[1],文件路径=库环境路径.match(/%.*?%(.*)/)[1];
- const 执行宏调用=ExecuteExcel4Macro;
- let 环境路径=执行宏调用(`CALL("Kernel32","GetEnvironmentVariableA","2FFJ","${环境变量}",0,128)`);
- var 库文件路径=环境路径+文件路径;
- }else{var 库文件路径=库环境路径;}
- return [库文件路径,字符串编号];
- }
- function 以数据方式加载库(库文件){ //返回库加载后的模块句柄
- let 数据方式=0x2;
- const 执行宏调用=ExecuteExcel4Macro;
- let 模块句柄=执行宏调用(`CALL("Kernel32","LoadLibraryExA","JFJJ","${库文件}",0,${数据方式})`);
- if(!模块句柄){console.log("错误代码:"+执行宏调用(`CALL("Kernel32","GetLastError","I")`));}
- return 模块句柄;
- }
- function 读取库中字符串资源(模块句柄,字符串代号){
- const 执行宏调用=ExecuteExcel4Macro;
- let 字符串字节数=255;
- let 字符串=执行宏调用(`CALL("User32","LoadStringA","3JJFJ",${模块句柄},${字符串代号},"",${字符串字节数})`);
- return 字符串;
- }
- function 释放库(模块句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- let 结果=执行宏调用(`CALL("Kernel32","FreeLibrary","AJ",${模块句柄})`);
- return 结果;
- }
复制代码 |
|