wpsjs加载项读取注册表

wils
wils

创作者俱乐部成员

昨天有朋友问,在wpsjs里如何读取注册表里的一个路径信息

function aa()
{
    const h = wps.ExecuteExcel4Macro(`CALL("Advapi32", "RegOpenKeyExA", "5JCJJN", ${0x80000001 << 0}, "SOFTWARE\\kingsoft\\Office\\6.0\\Common", 0, 1, 0)`)
    const n = wps.ExecuteExcel4Macro(`CALL("Advapi32", "RegGetValueA", "7JCCJNJN", ${h}, "", "InstallRoot", 2, 0, 0, 0)`)
    const b = wps.ExecuteExcel4Macro(`CALL("Kernel32", "VirtualAlloc", "JJJJJ", 0, ${n}, ${0x00001000 | 0x00002000}, 4)`)
    wps.ExecuteExcel4Macro(`CALL("Advapi32", "RegGetValueA", "JJCCJNJN", ${h}, "", "InstallRoot", 2, 0, ${b}, ${n})`)
    console.log(wps.ExecuteExcel4Macro(`CALL("Kernel32", "lstrcpyA", "1FJ", "", ${b})`))
    wps.ExecuteExcel4Macro(`CALL("Kernel32", "VirtualFree", "JJJJ", ${b}, 0, ${0x00008000})`)
    wps.ExecuteExcel4Macro(`CALL("Advapi32", "RegCloseKey", "JJ", ${h})`)
}

由于wpsjs里目前没有ffi,只好用ExecuteExcel4Macro调用winapi

大概意思是:

  • 打开注册表里的一个路径

  • 第一次读取不接收数据,只获得结果的大小

  • 开辟一块指定大小的空间

  • 第二次读取接收数据

  • 清理


如果是在jsa里用ffi写会方便准确很多

我不确定是否需要lstrcpyA来读取,似乎这样也能读出来

ExecuteExcel4Macro(`CALL("Advapi32", "RegGetValueA", "6JCCJNFN", ${h}, "", "InstallRoot", 2, 0, ${b}, ${n})`)

希望大佬指点怎么写更准确,多谢

海南省
浏览 907
1
4
分享
4 +1
1
1 +1
全部评论 1
 
韩宇帆
好内容
· 浙江省
回复