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

问题描述 投票:1回答:1

当Windows剪贴板具有从Evernote复制的内容时,它包含格式类型为“ENML格式”的数据对象。例如,如果我从Evernote for Windows中的笔记中复制“Chirp Chirp”,我会在剪贴板上看到与“ENML格式”相关的以下数据:

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

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

生成ENML并将其放在剪贴板上很容易,但我不能让Evernote接受它。似乎Evernote只接受来自剪贴板的ENML,如果它识别出“Cookie”号码。作为一个实验,我尝试重用我从Evernote中发生的复制操作中捕获的“Cookie”值,并且使用此魔术值,粘贴操作成功。但是,在现实生活中,我无法获得Evernote接受的“Cookie”号码。

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

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

有没有办法从外部Evernote将ENML放到剪贴板上,这样将格式化的内容粘贴到Evernote中实际上会有效? “Cookie”属性的用途是什么?

c# windows clipboard evernote
1个回答
0
投票

事实证明,Evernote并非旨在接受来自外部应用程序的ENML。 “Cookie”属性用于确认“ENML格式”有效负载是由Evernote生成的 - 因此不需要针对ENML DTD进行验证。理想情况下,这意味着也可以接受符合DTD的ENML,假设它是有效的。然而,有一些东西--22:Evernote拒绝“ENML格式”剪贴板有效载荷,如果它没有它的根元素......但是该元素没有在DTD中定义。 (这是Evernote forum post,工作人员确认从其他应用程序粘贴ENML并不意味着支持。)

但是......我确实找到了解决方法。我能够粘贴包含来自ENML的待办事项复选框样式的HTML,并且Evernote将其转换为复选框,这最终是我想要的。我希望能够从另一个Windows应用程序粘贴正确的ENML,但能够在HTML中定义复选框并在粘贴时显示它们是一个可接受的解决方法,为了我的目的。

这是待办事项项的HTML示例,因为它出现在剪贴板有效负载中:

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

在上下文中,这是一个整个HTML剪贴板有效负载的示例,包括Windows剪贴板上HTML数据标准的荒谬标题:

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笔记中,我很乐意听到它 - 并乐意改变接受的答案。

© www.soinside.com 2019 - 2024. All rights reserved.