JSA里的ffi(13)——获取复制区域的地址

wils
wils

创作者俱乐部成员

有朋友问,如何获取wps表格里,已复制区域的地址

也就是在wps表格里,ctrl-c之后,一个区域被虚线包裹,接着又选中了其他区域,这时候如何获取虚线区域的地址

搜到了一个ahk脚本,是通过分析剪贴板的内容得到的地址,正好ffi可以方便的读取剪贴板,试一下


function tt(){
    const {RegisterClipboardFormatA, OpenClipboard, CloseClipboard, IsClipboardFormatAvailable, GetClipboardData} = ffi.LoadLibrary("User32",{
        RegisterClipboardFormatA: { returnType: "uint32", parameters: ["string"]},
        OpenClipboard: { returnType: "bool", parameters: ["pointer"]},
        CloseClipboard: { returnType: "bool", parameters: []},
        IsClipboardFormatAvailable: { returnType: "bool", parameters: ["uint32"]},
        GetClipboardData: { returnType: "pointer", parameters: ["uint32"]},
    })
    const {GlobalLock, GlobalUnlock} = ffi.LoadLibrary("Kernel32",{
        GlobalLock: { returnType: "pointer", parameters: ["pointer"]},
        GlobalUnlock: { returnType: "bool", parameters: ["pointer"]},
    })
    const lsd = RegisterClipboardFormatA("Link Source Descriptor")
    OpenClipboard(null)
    if(IsClipboardFormatAvailable(lsd)) {
        const h = GetClipboardData(lsd)
        const b = GlobalLock(h)
        console.log(b.AddOffset(b.Read("uint32", 0x30)).DerefU16String())
        GlobalUnlock(h)
    }
    CloseClipboard()
}

这里的0x30是问了ai,说正文的偏移量存在这个位置,我也没找到具体的文档

希望有大佬指点一下,剪贴板里Link Source Descriptor的结构到底是怎样的,有没有正规的方法得到这个信息,谢谢

如图运行后得到了剪贴板里关于复制区域地址的信息

很不完善,比如不连续的选区结果不太对,希望有更多朋友来讨论

海南省
浏览 211
1
6
分享
6 +1
1
1 +1
全部评论 1
 
λ公式探索者
不连续区域? 持续关注。感觉也许哪天我也用得上
· 广西
回复