【发布时间】:2019-11-18 22:26:09
【问题描述】:
我有一个网页,上面有各种表格。这些表格是 Javascript 组件,而不仅仅是纯 HTML 表格。我需要使用 Delphi 程序 (Delphi 10.3) 处理此网页的文本(有点类似于屏幕抓取)。
我执行 Ctrl-A/Ctrl-C 来选择所有网页并将所有内容复制到剪贴板。如果我将其粘贴到程序中的TMemo 组件中,我只会在表格之外获取文本。如果我粘贴到 MS Word 中,我可以看到所有内容,包括表格中的文本。
我可以将其正确粘贴到 TAdvRichEditor(第 3 方)中,但这需要很长时间,而且我经常会用完内存。这让我相信我需要直接读取带有 HTML 剪贴板格式的剪贴板。
我设置了一个剪贴板 HTML 格式。当我检查剪贴板内容时,我得到了所有汉字字符的样子。
当内容为 HTML 时,如何读取剪贴板的内容?
在一个完美的世界中,我只想要文本,而不是 HTML 本身,但我可以稍后将其删除。这就是我现在正在做的事情......
在初始化时..(CF_HTML 是一个全局变量)
CF_HTML := RegisterClipboardFormat('HTML Format');
那我的日常是……
function TMain.ClipboardAsHTML: String;
var
Data: THandle;
Ptr: PChar;
begin
Result := '';
with Clipboard do
begin
Open;
try
Data := GetAsHandle(CF_HTML);
if Data <> 0 then
begin
Ptr := PChar(GlobalLock(Data));
if Ptr <> nil then
try
Result := Ptr;
finally
GlobalUnlock(Data);
end;
end;
finally
Close;
end;
end;
end;
** 附加信息 - 当我从网页复制时...然后我可以使用名为 InsideClipBoard 的免费工具检查剪贴板缓冲区的内容。它显示剪贴板包含 1 个条目,具有 5 种格式:CT_TEXT、CF_OEMTEXT、CF_UNICODETEXT、CF_LOCALE 和 'HTML Format'(格式 ID 为 49409)。只有 'HTML Format' 包含我要查找的内容....这就是我尝试使用我显示的代码访问的内容。
【问题讨论】:
-
问题是当您使用 CTRL+A 然后 CTRL+C 复制网页的内容时,内容不会在剪贴板中保存为 HTML。至少没有基于
Clipbrd.exe,它是WindowsXP 中可用的剪贴板查看器。是的,您可以将此文件复制到 Windows 7,它仍然可以工作。但据我所知,它在 Windows 10 上不起作用。基于来自Clibrd.exe的信息,网页内容以文本、Unicode 文本、区域设置和 OEM 文本格式保存到剪贴板......跨度> -
... 区域设置格式是以二进制形式存储的一种格式,可能会导致所有看起来像汉字的字符。无论如何,您为什么不将浏览器中的网页保存为纯 HTML 格式。这可能会迫使浏览器将 JavaScript 生成的表格替换为您可以轻松处理的纯 HTML 表格。
-
从调试开始。深入挖掘。检查剪贴板。它实际上包含什么。
-
@@David - 我在我的问题中添加了一些附加信息。数据在剪贴板中,采用“HTML 格式”,但我不知道如何访问它。
标签: delphi clipboard clipboarddata