JSA里的ffi(13)——获取复制区域的地址
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的结构到底是怎样的,有没有正规的方法得到这个信息,谢谢
如图运行后得到了剪贴板里关于复制区域地址的信息
很不完善,比如不连续的选区结果不太对,希望有更多朋友来讨论