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
この記事へのコメントはこちら