ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Здесь можно обсудить ваш любимый плагин.
2useven10
Posts: 5206
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by 2useven10 »

Latest post of the previous page:

Обновил ещё раз - баг.
Pasha_ZZZ
Posts: 430
Joined: Mon 12 Jun, 2006 14:58
Has thanked: 1 time
Been thanked: 27 times
Contact:

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by Pasha_ZZZ »

А если сделать так: если OleInitialize вернет RPC_E_CHANGED_MODE - вызвать CoUnitialize, потом OleInitialize, потом снова CoUnitialize и наконец CoInitializeEx с MTA
2useven10
Posts: 5206
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by 2useven10 »

А посмотреть изменения?
Это как раз то что я называю 'переинициализацией до и после'.
Почти так и сделано, только:
потом снова OleUninitialize и наконец CoInitializeEx с MTA
Last edited by 2useven10 on Sat 20 Mar, 2021 18:00, edited 1 time in total.
Pasha_ZZZ
Posts: 430
Joined: Mon 12 Jun, 2006 14:58
Has thanked: 1 time
Been thanked: 27 times
Contact:

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by Pasha_ZZZ »

2useven10 wrote: Sat 20 Mar, 2021 17:58Почти так и сделано, только:
Последовательность, которую я предложил - чисто для конструктора. И тогда после конструктора уже в МТА будет оле.
2useven10
Posts: 5206
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by 2useven10 »

На мой взгляд, перебор. Но попробовать можно.
2useven10
Posts: 5206
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by 2useven10 »

Сам по себе трюк сработал. Т.е. после этой ИиИинициализации OleSetClipboard() возвращает S_OK.
Но делать так я не буду, поскольку
1) В документации явно сказано что Ole желательно работать в STA
2) Как после этого выполнять Uninitialize()?
Если оставить фару - будет CoUninitialize() и непарный OleInitialize().
Если самому выполнить OleUninitialize() не факт что отработает корректно и потом надо заново звать CoInitialize().
А это снова переинициализация только в извращенной форме.

3) Если оставить фару - следующий OleInitialize() снова возвращает RPC_E_CHANGED_MODE и вся безумная процедура будет выполнена снова.
Last edited by 2useven10 on Sat 20 Mar, 2021 19:15, edited 1 time in total.
Pasha_ZZZ
Posts: 430
Joined: Mon 12 Jun, 2006 14:58
Has thanked: 1 time
Been thanked: 27 times
Contact:

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by Pasha_ZZZ »

2useven10 wrote: Sat 20 Mar, 2021 18:53В документации явно сказано что Ole желательно работать в STA
В том-то и дело. И почему в самом фаре поменяли - вообще хз. Операции ОЛЕ не тред-сейф, о чем напрямую сказано в документации.
2useven10
Posts: 5206
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by 2useven10 »

Наверное у DrKnS были мотивы для замены, я не вникал, но кажется обоснованных возражений ни у кого не было.
С OLE получается несколько геморройно, но сама технология изначально такая и давно уже со знамён MS ушла.
Конкретно в этом плагине можно переделать на функции из user32.dll (я не планирую),
да и хак с переинициализацией вроде бы работает.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by DrKnS »

Какие-то у вас совсем страшные хаки пошли.
Я вынес инициализацию MTA в отдельный тред, STA в этом и прочих плагинах должен заработать.
Pasha_ZZZ
Posts: 430
Joined: Mon 12 Jun, 2006 14:58
Has thanked: 1 time
Been thanked: 27 times
Contact:

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by Pasha_ZZZ »

DrKnS wrote: Sun 21 Mar, 2021 00:31STA в этом и прочих плагинах должен заработать.
Оригинальный 3.0.1 (без хаков) все равно не работает. Выдает ошибку как и раньше.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by DrKnS »

Pasha_ZZZ wrote: Sun 21 Mar, 2021 05:58 Оригинальный 3.0.1 (без хаков) все равно не работает
У меня работает.
Проверяйте без других плагинов, т.к., очевидно, COM может инициализировать что угодно.
Pasha_ZZZ
Posts: 430
Joined: Mon 12 Jun, 2006 14:58
Has thanked: 1 time
Been thanked: 27 times
Contact:

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by Pasha_ZZZ »

DrKnS wrote: Sun 21 Mar, 2021 12:26Проверяйте без других плагинов
Другие плагины нужнее, этот вполне заменяем Ctrl+Shift+C/X. Только Ctrl+Shift+V не хватает. Правда можно соорудить костыль через EMenu...

Чистый 7z архив 5765 x64 в портативном виде + ClipCopy = та же ошибка.
Last edited by Pasha_ZZZ on Sun 21 Mar, 2021 12:39, edited 1 time in total.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by DrKnS »

Да, увы, эксперимент не удался.
polinom11
Posts: 6
Joined: Fri 08 Apr, 2022 07:21
Has thanked: 3 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by polinom11 »

Проблема с копированием файлов через буфер обмена так и не решилась? У меня FAR выдает ошибку: %APPDATA%\Far Manager\Profile\Macros\scripts\Panel.CtrlC,V,X,B.lua Invalid macro flag: DisableOutput.
polinom11
Posts: 6
Joined: Fri 08 Apr, 2022 07:21
Has thanked: 3 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by polinom11 »

Разобрался. Флаг "DisableOutput" больше не существует, заменил его на "EnableOutput" и все заработало.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

ClipCopy (Clipboard Copy) — Копирование через буфер обмена

Post by Shmuel »

polinom11, если там был раньше флаг DisableOutput (которого теперь нет), то можно не заменять его на EnableOutput (ибо его значение противоположно), а просто удалить.
Post Reply

Return to “Обсуждение плагинов”