如何将 ENML 放在 Windows 剪贴板上以便粘贴到 Evernote 中

How to place ENML on Windows clipboard so that pasting into Evernote works

当Windows剪贴板有从印象笔记复制的内容时,它包括一个格式类型为"ENML Format"的数据对象。例如,如果我从 Windows 的 Evernote 笔记中复制 "Chirp Chirp",我会在剪贴板上看到以下数据,与 "ENML Format":

相关联
<en-clipboard Cookie="6479053"><en-note>Chirp Chirp</en-note></en-clipboard>

我有一个 C# Windows 应用程序,我想在其中生成待办事项列表项并将它们放在 Windows 剪贴板上,这样它们就可以通过复选框粘贴到 Evernote 中。 (Evernote 使用的复选框元素在 HTML 中不存在,所以我不能只将 HTML 放在剪贴板上——它必须是 ENML。)

生成 ENML 并将其放在剪贴板上很容易,但我无法让 Evernote 接受它。似乎 Evernote 只有在识别 "Cookie" 数字时才会接受剪贴板中的 ENML。作为一项实验,我尝试重新使用从 Evernote 中发生的复制操作中捕获的 "Cookie" 值,并使用这个神奇的值粘贴操作成功。但是,在现实生活中,我无法获得 Evernote 接受的 "Cookie" 号码。

如果我关闭 "Cookie" 属性或输入随机值,则粘贴到 Evernote 会失败。只有当我将 "Cookie" 属性设置为 Evernote 最近生成的数字时,我才能让 Evernote 粘贴我放在剪贴板上的 ENML。但是,如果我随后退出 Evernote 并重新启动它,我粘贴的内容将再次被拒绝——我之前使用的幻数不再被接受。

我试过不使用 <en-clipboard> 元素,只粘贴以 <en-note> 元素开头的 ENML,但 Evernote 默默地拒绝了剪贴板负载。

有什么方法可以从 Evernote 外部将 ENML 放到剪贴板上,以便将格式化后的内容粘贴到 Evernote 中真的有效吗? "Cookie" 属性的作用是什么?

事实证明,Evernote 并未设计为接受来自外部应用程序的 ENML。 "Cookie" 属性用于确认 "ENML Format" 负载是由 Evernote 生成的——因此不需要根据 ENML DTD 对其进行验证。理想情况下,这意味着符合 DTD 的 ENML 也将被接受,假定它是有效的。但是,有一个陷阱 22:如果 "ENML Format" 剪贴板有效负载不具有根元素,则 Evernote 会拒绝它……但该元素未在 DTD 中定义。 (这里是 Evernote forum post 工作人员确认不支持从另一个应用程序粘贴 ENML。)

但是...我确实找到了解决方法。我能够粘贴 HTML,其中包含来自 ENML 的 to-do 复选框样式,Evernote 将其翻译成复选框,这正是我想要的。我希望能够从另一个 Windows 应用程序粘贴正确的 ENML,但能够在 HTML 中定义复选框并在粘贴时显示它们是我的目的可以接受的解决方法。

这是 to-do 项目的 HTML 示例,因为它出现在剪贴板负载中:

<div><span style="-en-todo:true;">[]</span>Daily To-Do Item</div>

为了说明这一点,下面是整个 HTML 剪贴板有效负载的示例,包括 Windows 上 HTML 数据的标准荒谬 header =]剪贴板:

Version:0.9
StartHTML:000000149
EndHTML:000000720
StartFragment:000000251
EndFragment:000000682
StartSelection:000000251
EndSelection:000000682
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
<!--StartFragment-->
<div style="-en-clipboard:true;"><span style="font-weight: bold;">Sunday, March 3</span></div><div>Example of a daily reminder</div><div><span style="-en-todo:true;">[]</span>Daily To-Do Item</div><div><span style="font-weight: bold;">Monday, March 4</span></div><div>Example of a daily reminder</div><div><span style="-en-todo:true;">[]</span>Daily To-Do Item</div><div><span style="-en-todo:true;">[]</span>Weekday Item</div>
<!--EndFragment-->
</body>
</html>

如果 Evernote 发生变化,使得符合 DTD 的 ENML 可以由另一个应用程序生成,放置在 Windows 剪贴板上,并粘贴到现有的 Evernote 笔记中,我很想听听它 - - 并将愉快地更改已接受的答案。