Ejemplo n.º 1
0
        // 履歴を取得する基本的な流れ(説明用)
        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;
            }
        }
Ejemplo n.º 2
0
        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));
     }
 }
Ejemplo n.º 6
0
 public void SetData(DataPackageView package)
 {
     data.Clear();
     package.AvailableFormats.ToList().ForEach(f => data.Add(f, package.GetDataAsync(f).GetAwaiter().GetResult()));
 }
Ejemplo n.º 7
0
 IAsyncOperation <object> IDataPackageViewResolver.GetDataAsync(DataPackageView dataPackageView, string formatId) => dataPackageView.GetDataAsync(formatId);
Ejemplo n.º 8
0
        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.
                }
            }
        }