Windows8 Metroスタイルアプリでクリップボードから画像を取得する方法

   2013/08/29

Windows8 Metroスタイルアプリでクリップボードから画像を取得する方法

つまづいたこと

クリップボードからデータを取得しようとして、Windows.ApplicationModel.DataTransfer名前空間にあるClipboardクラスのGetContentメソッドを呼び出したところ、例外(UnauthorizedAccessException)が発生してしまい、データが取得できませんでした。

解決策

どうやら、クリップボードにアクセスするためには、アプリがForegroundにいる必要があるようです。
ということで、今回は、データ取得タイミングを遅らせることで対応しました。
具体的には、GotFocusイベントが送られてくるまで、処理を待つことにしました。
エラー処理など細かな処理は省きますが、流れとしては以下のような感じです。

private void OnGotFocus(object sender, RoutedEventArgs e)
{
    this.calledGotFocus = true;
}

private void GetData()
{
    for (int = 0; i < 10; i++)
    {
        if (this.calledGotFocus == true)
        {
            break;
        }
        await Task.Delay(TimeSpan.FromMilliseconds(500));
    }

    DataPackageView dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
}

確認環境

Windows8 RTM – 32 Bit
Visual Studio 12 RTM

当ブログ内の関連記事もどうぞ

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください