Странность с доступом буфера обмена

Можно использовать class метод для получения класса любого объекта в рубине.

, например,

     array= [] 
     => []
     array.class
     => Array

     hash = {}
     => {}
     hash.class
     => Hash

     string = 'This is String'
     => "This is String"
     string.class
     => String 
6
задан Martin Harris 3 September 2009 в 16:40
поделиться

2 ответа

В буфере обмена Windows есть только один объект в время. Но есть несколько доступных форматов (например, RTF, Text, HTML) из этого одного объекта. Я думаю, что вы делаете это слишком сложным, и ваш код должен быть примерно таким:

//Store the old clipboard data
IDataObject clipboardData = Clipboard.GetDataObject();

Clipboard.SetText("Hello world!");

string value = Clipboard.GetText();
Console.WriteLine(value);

//Clear the clipboard again and restore old data
Clipboard.Clear();
Clipboard.SetDataObject(clipboardData);

Console.ReadLine();
5
ответ дан 17 December 2019 в 02:31
поделиться

Мартин Я пробовал ваш код. В моей системе установлен ClipX . Когда он работает, когда я запускаю ваш код, я получаю столько элементов, сколько их в кеше ClipX. Но вызов Clipboard.GetDataObject () возвращает только последний объект. Итак, что происходит, когда вы вызываете этот цикл:

foreach (string format in clipboardData.GetFormats())
{
    clipboardCache.Add(format, clipboardData.GetData(format));
}

, он возвращает формат для всего объекта в ClipX и конвертирует данные, возвращенные

IDataObject clipboardData = Clipboard.GetDataObject();

. Так что на самом деле, когда вы выполняете этот цикл

foreach (KeyValuePair<string, object> valuePair in clipboardCache)
{
    Clipboard.SetData(valuePair.Key, valuePair.Value);
    Thread.Sleep(100);
}

, у вас есть только один объект который устанавливается в буфер обмена.

Во-вторых, при использовании Clipboard.SetData (format, object) перезапись старого объекта новым является нормальным поведением, а не нормальным. Если вы создаете что-то вроде буфера обмена с несколькими записями, вам необходимо перехватывать системные вызовы копирования и вставки и сохранять объект в памяти или на диске вашей программы. Вы не можете полагаться на буфер обмена по умолчанию.

1
ответ дан 17 December 2019 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: