Как поместить ENML в буфер обмена Windows, чтобы вставка в Evernote работала - PullRequest
0 голосов
/ 04 марта 2019

Если в буфере обмена Windows есть содержимое, скопированное из Evernote, оно включает в себя объект данных с типом формата «ENML Format».Например, если я копирую «Chirp Chirp» из заметки в Evernote для Windows, я вижу следующие данные в буфере обмена, связанные с «форматом 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».В качестве эксперимента я попытался повторно использовать значение «Cookie», которое я извлек из действия копирования, которое происходило в Evernote, и с этим магическим значением на месте действие вставки прошло успешно.Однако в реальной ситуации у меня нет возможности получить число «Cookie», которое Evernote примет.

Если я оставлю атрибут «Cookie» отключенным или добавлю случайное значение, вставив его в Evernoteвыходит из строя.Только если я установлю для атрибута «Cookie» число, которое было недавно сгенерировано Evernote, я смогу заставить Evernote вставить ENML, который я поместил в буфер обмена.Однако если я затем выйду из Evernote и перезапущу его, мой вставленный контент снова будет отклонен - ​​магическое число, которое я использовал ранее, больше не принимается.

Я пытался отключить элемент <en-clipboard>, ипросто вставьте ENML, который начинается с элемента <en-note>, но Evernote молча отвергает полезную нагрузку буфера обмена.

Есть ли какой-нибудь способ вставить ENML в буфер обмена из-за пределов Evernote, так что вставка отформатированного содержимого в Evernote фактическиРабота?Какой цели служит атрибут «Cookie»?

1 Ответ

0 голосов
/ 04 марта 2019

Оказывается, Evernote не был предназначен для приема ENML из внешних приложений.Атрибут «Cookie» используется для подтверждения того, что Evernote сгенерировал полезную нагрузку «Формат ENML» и, следовательно, его не нужно проверять на соответствие DTD ENML.В идеале это будет означать, что ENML, который соответствует DTD, также будет принят, если он действителен.Тем не менее, есть кое-что уловка-22: Evernote отклоняет полезную нагрузку буфера обмена «Формат ENML», если у него нет корневого элемента ... но этот элемент не определен в DTD.(Вот сообщение на форуме Evernote , в котором сотрудник подтвердил, что вставка ENML из другого приложения не должна поддерживаться.)

Однако ... Я нашел обходной путь.Мне удалось вставить HTML-код, включающий стиль чек-боксов из ENML, и Evernote перевел его в чек-бокс, что, в конечном счете, и было целью.Я бы предпочел иметь возможность вставлять надлежащий ENML из другого приложения Windows, но возможность определять флажки в HTML и отображать их при вставке - приемлемый обходной путь для моей цели.

Это примерHTML для элемента списка дел, как он отображается в полезной нагрузке буфера обмена:

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

Чтобы представить это в контексте, вот пример того, как выглядит вся полезная нагрузка буфера обмена HTML, включая смешной заголовок, который является стандартным дляДанные HTML в буфере обмена Windows:

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 изменится так, что ENML, соответствующий DTD, может быть создан другим приложением, помещен в буфер обмена Windows и вставлен в существующую заметку Evernote.хотел бы услышать об этом - и с радостью изменит принятый ответ.

...