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

时间:2019-03-04 01:08:50

标签: c# windows clipboard evernote

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仅在识别出“ Cookie”数字时才接受剪贴板中的ENML。作为实验,我尝试重用从Evernote内发生的复制操作中捕获的“ Cookie”值,并使用此魔术值成功完成了粘贴操作。但是,在现实生活中,我无法获得Evernote可以接受的“ Cookie”编号。

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

我尝试放弃<en-clipboard>元素,只粘贴以<en-note>元素开头的ENML,但Evernote默默地拒绝剪贴板有效载荷。

是否有某种方法可以从Evernote外部将ENML粘贴到剪贴板上,从而将格式化的内容粘贴到Evernote中实际上可以工作? “ Cookie”属性有什么作用?

1 个答案:

答案 0 :(得分:0)

事实证明Evernote并非旨在接受外部应用程序的ENML。 “ Cookie”属性用于确认Evernote生成了“ ENML Format”有效载荷,因此不需要针对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笔记中,我很乐意听到它-并将很高兴地更改接受的答案。