Проверьте с помощью C#, действительно ли буфер обмена пуст и нет ли там какого-либо формата
Я хотел бы проверить с помощью пользовательского метода C#, похожего на "IsClipBoardEmpty", действительно ли мой буфер обмена пуст. Метод должен быть на чистом C# и не требовать никакого STA_THREAD или внешнего API или чего-то еще. Я пробовал разные решения, которые не работали на меня. У меня есть пункт меню "очистить буфер обмена". Этот пункт меню я хочу отключить, когда буфер обмена пуст. С пустым я имею в виду: он ясен и не имеет ни текста, ни изображений, ни файловых капель, ни графики, ни каких-либо других пользовательских объектов внутри. Я видел разные методы с требованием "STA_THREAD", но мне нужна функция, не требующая STA_THREAD.
Вот мои попытки пользовательского кода, которые не работали:
//1 DataObject retrievedData = (DataObject)Clipboard.GetDataObject(); if(retrievedData==null) { toolStripMenuItem1.enabled=false; } //2 object retrievedData = ClipBoard.GetText(); if(retrievedData==null) { toolStripMenuItem1.enabled=false; } //3 if((Clipboard.GetText().toString()!="") { toolStripMenuItem1.enabled=true; } else { toolStripMenuItem1.enabled=false; }
Что я уже пробовал:
Я выложил функции,которые уже пробовал. Ничего не помогало.
Это тоже не работает. функция всегда возвращает false,
даже если буфер обмена уже пуст.
public static bool IsClipboardEmpty() { return (Clipboard.GetDataObject() == null); }
И то, что мне нужно, - это метод расширения типа "буфер обмена.IsEmpty ()".
Я уже пытался добавить все существующие операторы using и ссылки для C# и увеличил размер моего приложения до 300 МБ. В любом случае метод расширения остается со всеми ссылками на все совместимые DLL-файлы в системе, все еще неизвестные. Есть идеи, какая DLL может содержать такую функцию?