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

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