Próbuję napisać małą aplikację, która musi korzystać ze schowka dla niektórych funkcji. Ponieważ nie chcę nadpisywać danych użytkownika znajdujących się w schowku, postanowiłem zapisać go w pamięci, wykonać zadanie, a następnie je zapisać. Poniższy kod to aplikacja konsolowa, która jest prostym przykładem tego, co próbuję zrobić.Dziwność z dostępem do schowka
Problem, który mam, to przywrócenie stanu. Jeśli skopiuję coś do schowka z Visual Studio przed uruchomieniem aplikacji, w schowku znajduje się łącznie sześć obiektów (różne formaty ciągów znaków i ustawienia regionalne), które wszystkie zostaną umieszczone w pamięci podręcznej. Raz je przywracam, chociaż w schowku są tylko ustawienia narodowe i wydaje się, że każde wywołanie SetData() zastępuje ostatnie. (przy okazji SetDataObject nie wydaje się być odwrotnością GetDataObject, więc nie mogę tego po prostu użyć)
Jakieś pomysły, w jaki sposób mogę zapisać stan schowka i przywrócić go później?
[STAThread]
static void Main(string[] args)
{
//Store the old clipboard data
Dictionary<string, object> clipboardCache = new Dictionary<string, object>();
IDataObject clipboardData = Clipboard.GetDataObject();
foreach (string format in clipboardData.GetFormats())
{
clipboardCache.Add(format, clipboardData.GetData(format));
}
Clipboard.SetText("Hello world!");
string value = Clipboard.GetText();
Console.WriteLine(value);
//Clear the clipboard again and restore old data
Clipboard.Clear();
foreach (KeyValuePair<string, object> valuePair in clipboardCache)
{
Clipboard.SetData(valuePair.Key, valuePair.Value);
Thread.Sleep(100);
}
Console.ReadLine();
}
Czy używasz wtyczek do wielu obiektów, takich jak ClipX? – TheVillageIdiot
Fragment kodu faktycznie rozwiązał mój problem - zupełnie inny od twojego - ale google poprowadził mnie tutaj, więc opublikuję szczegóły tutaj: Dla każdego, kto ma problemy z dostępem do schowka Windows z aplikacji na konsolę, upewnij się, że udekorowałeś swój "Główny" "metoda z atrybutem" STAThread] "! : D – BrainSlugs83