С 15.09 история КлипАнгела стала засоряться списками методов Турбоконфа

tormozit Закрыто Средний

Ты отключил установку флага-формата буфера обмена передачи сигнала КлипАнгелу?

Комментарии

bolsun
#1, 20 сентября 2025 08:30

Я передаю флаг.


tormozit
#2, ред. 20 сентября 2025 21:46

Почти всегда теперь приходит пустая строка внутри этого формата.


tormozit
#3, 20 сентября 2025 21:48

Из 20 попыток 20 раз пришла пустая строка.


tormozit
#4, ред. 20 сентября 2025 22:41

У меня там попытка

        private static string GetStringFromClipboardData(IDataObject iData, string formatName)
        {
            string dataString = "";
            try
            {
                dataString = (string) iData.GetData(formatName);
            }
            catch (Exception ex)
            {
                var temp = 1;
            }
            return dataString;
        }

Остановился в обработке исключения. Там каждый раз такая ошибка

[System.InvalidCastException] = {System.InvalidCastException: Unable to cast object of type 'System.IO.MemoryStream' to type 'System.String'.


tormozit
#5, ред. 20 сентября 2025 23:26

Надо бы вернуть на твоей стороне обычную строку вместо MemoryStream


tormozit
#6, ред. 20 сентября 2025 23:21

Даже если я угадаю кодировку, то потеряется совместимость в этом сценарии между старыми версиями КлипАнгела и новым Турбоконфом.


tormozit
#7, ред. 21 сентября 2025 07:08

Кодировку Unicode угадал. Удаление мусорных клипов в КлипАнгеле заработало.


bolsun
#8, ред. 21 сентября 2025 11:44

Я не понял как .NET формирует DataObject, что бы он мог автоматически преобразовывать обратно в string через .NET GetData()

В каком формате эти данные - непонятно. Какая-то сериализация похоже.

Я по правилам сформировал и сериализовал в байтовый массив строку в кодировке Unicode, таким образом ее могут получать и другие приложения, не только на .NET


tormozit
#9, ред. 21 сентября 2025 11:53

(8) bolsun, формат RemoveTempClipsFromHistory по большому счету специфичен для взаимодействия Турбоконфа только с КлипАнгелом. Поэтому кажется нет большого смысла учитывать удобство его чтения какими то другими приложениями. А вот то, что в старых версиях КлипАнгела теперь много мусора попадает в историю - ощутимое неудобство, т.к. это замедляет поиск как визуальный, так и программный (фильтрацию).


bolsun
#10, 21 сентября 2025 12:02

(9) tormozit, DataObject - это OLE контейнер, для его использования есть методы

[DllImport("ole32.dll", CharSet = CharSet.Auto)]
public static extern int OleGetClipboard(ref System.Runtime.InteropServices.ComTypes.IDataObject data);

[DllImport("ole32.dll", CharSet = CharSet.Auto)]
public static extern int OleSetClipboard(System.Runtime.InteropServices.ComTypes.IDataObject pDataObj);

которые и использует стандартный механизм .NET (который у тебя же на машине вызывает подтормаживания)

Поэтому варианты:

  1. Вернуться к предыдущей реализации установки буфера
  2. Пользователям ClipAngel + TurboConf (не думаю, что их огромное количество в такой связке) обновиться до версии с поддержкой.


bolsun
#11, ред. 21 сентября 2025 12:04

Есть конечно еще вариант пробовать написать свою реализацию Unmanaged кода помещения OLE контейнера в буфер, но это уже за гранью разумного.


tormozit
#12, 21 сентября 2025 12:13

Да, наверное накладно будет поддержать старый формат. Тогда просьба добавить проверку на версию сборки активного процесса ClipAngel. Если она менее 2.20, то выводить (при старте) рекомендацию обновить его.


tormozit
#13, ред. 21 сентября 2025 12:27

Выпустил ClipAngel 2.20 с исправлением автоматического удаления временных клипов, создаваемых TurboConf 6.4.9390+


bolsun
#14, 21 сентября 2025 13:24

(12) tormozit, это норма?


tormozit
#15, 21 сентября 2025 14:08

(14) bolsun, в версии 2.19 да


bolsun
#16, 21 сентября 2025 21:07

6.4.9395.41477

Добавил проверку и вывод уведомления.

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#17, 22 сентября 2025 10:35

Проверил. Уведомление появляется.
tormozit изменил статус на Закрыто


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера