// 履歴を取得する基本的な流れ(説明用) public static async Task GetClipboardHistoryAsync() { if (!Clipboard.IsHistoryEnabled()) { return; // 設定で履歴が無効にされている } var result = await Clipboard.GetHistoryItemsAsync(); // 履歴の取得に失敗したときは、result.Statusに // Success以外(AccessDeniedまたはClipboardHistoryDisabled)が返される if (result.Status != ClipboardHistoryItemsResultStatus.Success) { return; } // 履歴のリストを取り出す IReadOnlyList <ClipboardHistoryItem> historyList = result.Items; // それぞれの履歴アイテムを処理する foreach (ClipboardHistoryItem item in historyList) { // 履歴アイテムのIDとタイムスタンプ string id = item.Id; DateTimeOffset timestamp = item.Timestamp; // データ(クリップボードのデータと同じ型) DataPackageView content = item.Content; // テキストデータを取り出す例 if (content.Contains(StandardDataFormats.Text)) { string textData = await content.GetTextAsync(); // DataPackageViewに入っているデータは、 // このようにして非同期メソッドを使って取得する } // データとして入っているフォーマットの一覧 List <string> formats = content.AvailableFormats.ToList(); // content.AvailableFormatsはSystem.__ComObjectのリストなので、 // ToList拡張メソッドを使って「こっちの世界に固定する」 // 全てのデータを取りだす例 foreach (string format in formats) { object data = await content.GetDataAsync(format); //Type dataType = data.GetType(); //if (dataType.FullName == "System.__ComObject") //{ // // ただし、GetTypeしてもSystem.__ComObject型が返ってきてしまい、 // // その実体が何であるか不明なデータもある // var types = dataType.GetInterfaces(); //←ITypeInfoを実装していないのでは何だか分からない //} } // ローミングされてクリップボードに入れられたデータかどうか bool isFromRoamingClipboard = content.Properties.IsFromRoamingClipboard; } }
static byte[] GetByteArray(DataPackageView dpv, string formatId) { var task = Task <byte[]> .Run(async() => { try { //var reference = (IRandomAccessStreamReference)await dpv.GetDataAsync(formatId); var random = (IRandomAccessStream)await dpv.GetDataAsync(formatId); //return reference as byte[]; //var random = (Windows.Storage.Streams.IRandomAccessStream)reference.OpenReadAsync(); //using (var reader = new DataReader(random.GetInputStreamAt(0))) using (var reader = new DataReader(random)) { var bytes = new byte[random.Size]; await reader.LoadAsync((uint)random.Size); reader.ReadBytes(bytes); return(bytes); } } catch (Exception) { return(null); } }); return(task.Result); }
private async Task ShowSharedCustomPerson(DataPackageView shareData) { DefaultViewModel["IsCustomItemShared"] = true; DefaultViewModel["IsCustomItemLoading"] = true; var sharedPersonObject = await shareData.GetDataAsync(AppSettings.CustomPersonSchemaName); var personJsonObject = JObject.Parse(sharedPersonObject.ToString()); DefaultViewModel["IsCustomItemLoading"] = false; DefaultViewModel["SharedCustomItem"] = personJsonObject.ToString(); }
public static async Task <DataPayload> GetData(this DataPackageView data) { var shareData = new DataPayload { Title = data.Properties.Title, Description = data.Properties.Description }; var formats = data.AvailableFormats.ToList(); shareData.AppLink = await data.GetAppLink(); formats.Remove(StandardDataFormats.ApplicationLink); shareData.Bitmap = await data.GetBitmap(); formats.Remove(StandardDataFormats.Bitmap); shareData.Html = await data.GetHtml(); formats.Remove(StandardDataFormats.Html); shareData.Rtf = await data.GetRtf(); formats.Remove(StandardDataFormats.Rtf); shareData.Text = await data.GetText(); formats.Remove(StandardDataFormats.Text); shareData.WebLink = await data.GetWebLink(); formats.Remove(StandardDataFormats.WebLink); shareData.StorageItems = await data.GetStorageItems(); formats.Remove(StandardDataFormats.StorageItems); // Since we removed all the built-in data formats, the remaining will be the custom data formats that the developer has included var customData = new Dictionary <string, object>(); foreach (var customFormat in formats) { var d = await data.GetDataAsync(customFormat); customData.Add(customFormat, d); } shareData.CustomData = new ReadOnlyDictionary <string, object>(customData); return(shareData); }
public static async Task <T> GetData <T>(this DataPackageView data, string dataFormat) where T : class { try { if (data.Contains(dataFormat)) { return(await data.GetDataAsync(dataFormat) as T); } return(default(T)); } catch (Exception) { return(default(T)); } }
public void SetData(DataPackageView package) { data.Clear(); package.AvailableFormats.ToList().ForEach(f => data.Add(f, package.GetDataAsync(f).GetAwaiter().GetResult())); }
IAsyncOperation <object> IDataPackageViewResolver.GetDataAsync(DataPackageView dataPackageView, string formatId) => dataPackageView.GetDataAsync(formatId);
public static async Task CopyTo(this DataPackageView view, IDictionary<string, object> values) { foreach (var format in view.AvailableFormats) { try { if (format == StandardDataFormats.Bitmap) { var value = await view.GetBitmapAsync(); values.Add(format, value); } else if (format == StandardDataFormats.Html) { var value = await view.GetHtmlFormatAsync(); values.Add(format, value); if (!values.ContainsKey(StandardDataFormats.Text)) values.Add(StandardDataFormats.Text, value); } else if (format == StandardDataFormats.Rtf) { var value = await view.GetRtfAsync(); values.Add(format, value); if (!values.ContainsKey(StandardDataFormats.Text)) values.Add(StandardDataFormats.Text, value); } else if (format == StandardDataFormats.StorageItems) { var value = await view.GetStorageItemsAsync(); var extensions = value.Select(f => "*" + Path.GetExtension(f.Name)).ToArray(); values.Add("extensions", extensions); values.Add(format, value); if (value.Count() == 1) { var file = value.OfType<StorageFile>().SingleOrDefault(); if(file != null && file.Attributes.HasFlag(FileAttributes.Temporary)) { var copiedFile = await file.CopyAsync( ApplicationData.Current.LocalFolder, file.Name, NameCollisionOption.ReplaceExisting); values[format] = new[] { copiedFile }; } if (!values.ContainsKey(StandardDataFormats.Bitmap)) { var stream = RandomAccessStreamReference.CreateFromFile(file); values.Add(StandardDataFormats.Bitmap, stream); } } } else if (format == StandardDataFormats.Text) { var value = await view.GetTextAsync(); values.Add(format, value); } else if (format == StandardDataFormats.ApplicationLink) { var value = await view.GetApplicationLinkAsync(); values.Add(format, value); if (!values.ContainsKey(StandardDataFormats.Text)) values.Add(StandardDataFormats.Text, value.ToString()); } else if (format == StandardDataFormats.WebLink) { var value = await view.GetWebLinkAsync(); values.Add(format, value); if (!values.ContainsKey(StandardDataFormats.Text)) values.Add(StandardDataFormats.Text, value.ToString()); } else if (ValidFormat(format)) { var value = await view.GetDataAsync(format); values.Add(format, value); } } catch (SecurityException) { throw; } catch { // Some formats are incompatible with WinRT and can cause it to throw unexpectedly. // guard against it and give a best effort copy of the available formats that are supported. } } }