質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

722閲覧

本番環境でクリップボード取り込みができない

trickre

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/11/21 12:11

編集2017/11/21 14:01

###クリップボードの内容を取り込みたい
C#でUWPアプリ(WindowsStoreアプリ)"SideClip"を作成しています。
クリップボード内容の変更のたびに自動で取り込むソフトです。
基本機能は完成しVisualStudio2017内の環境(Debug,Releaseビルド共に正常)では問題なく動作します。

###発生している問題、例外
・しかし、通常のアプリと同じくスタートメニューから起動させるとクリップボードの取り込みができません。
(VS2017で「デバッグ」実行するとインストール?されてスタートメニューに登録される。)
・アプリパッケージを作成しインストール(サイドローディング)して試しましたが症状は変わりません。
以下の例外が発生していることが分かりました。

System.UnauthorizedAccessException: アクセスが拒否されました。 at SharedLibrary!<BaseAddress>+0x4a0ad0 at SideClip!<BaseAddress>+0x8c1be at SideClip!<BaseAddress>+0x8c097 at SideClip!<BaseAddress>+0x98fb1

###該当のソースコード(MainPage.xaml.cs)

C#

1public MainPage() 2 { 3 this.InitializeComponent(); 4 Clipboard.ContentChanged += OnClipboardChanged;//クリップボード変更時のイベント登録 5 } 6//クリップボード変更時の動作 7 public void OnClipboardChanged(Object sender, Object e) 8 { 9 AddStack_from_Clipboard();//クリップボード取り込み関数 10 } 11 } 12 13//クリップボード取り込み関数の実装 14async void AddStack_from_Clipboard() 15 { 16 try 17 { 18 DataPackageView dpv = Clipboard.GetContent();//クリップボードの取り込み 19 if (dpv.Contains(StandardDataFormats.Text))//テキスト形式かどうか判定 20 { 21 string text = await dpv.GetTextAsync(); 22 data_stack.Add(text);//クリップボード情報の保存。 23 add_stack(text); 24 25 Grid grd = (Grid)area_stack.Children.First(); 26 Windows.UI.Xaml.Input.TappedRoutedEventArgs tev = new Windows.UI.Xaml.Input.TappedRoutedEventArgs(); 27 StackBlock_Tapped(grd, tev); 28 } 29 } 30 catch (Exception ex) {//ここで上記の質問の例外が発生します! 31 string err = ex.ToString(); 32 data_stack.Add(err);//例外の出力 33 add_stack(err); 34 } 35 return; 36 }

###補足情報(言語/FW/ツール等のバージョンなど)
開発環境:
Microsoft Visual Studio Community 2017
Version 15.4.4
VisualStudio.15.Release/15.4.4+27004.2009
Microsoft .NET Framework
Version 4.7.02046
インストールされているバージョン:Community
Visual C# 2017 00369-60000-00001-AA139
Microsoft Visual Studio VC パッケージ 1.0
NuGet パッケージ マネージャー 4.4.0
ユニバーサル Windows アプリ用 Visual Studio Tools 15.0.27004.2008

こんな部分を調べてみては?という提案でも構いませんのでどうかよろしくお願いします。

"""試みたこと(追記20171121)
1.例外発生個所は上記コードの DataPackageView dpv = Clipboard.GetContent であることは断定しました。
2.原因はアプリがバックグラウンドであることみたいです。(以下コードにより検証)
推測ですが、バックグラウンドになった本アプリからクリップボードの取り込みはOSによって阻止されているのでしょうか。ただアプリがバックグラウンド中にクリップボードを監視するということは本来の設計通りといえます。

今知りたいのは、
・バックグラウンドのアプリからクリップボードを取り込めるのか
・取り込めないとするとクリップボードの取り込みの別のアプローチはないか
ということです。

お力お借りできればと思います。よろしくおお願いします。

検証コード

C#

1//ボタンを設けてアプリがアクティブな時にクリップボードを取り込めるようにした。 2 private void button_Click(object sender, RoutedEventArgs e) 3 { 4 AddStack_from_Clipboard(); 5 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

◆クリップボードの取り込みの話がmsdnフォーラムにあったのでご参考まで
System.UnauthorizedAccessException while accessing Windows.ApplicationModel.DataTransfer.Clipboard

投稿2017/11/22 06:04

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trickre

2017/11/26 11:05

umyu様 ありがとうございます。 UWPアプリにおいてはアプリケーションがバックグラウンド状態のときにClipBoardにアクセスはできないようです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問