Windows 8.1 ストアアプリのスクリーンショット防止

#win8 dev_jp

Windows 8.1 でもアプリケーションのスクリーンショットを取ることができます。簡単な方法は、Print Screen キーを押すだけ。クリップボードに保存されるのであとは自由に使える。Win + PrintScreen キーならファイルに保存までしてくれる。さらにストアアプリの共有を使うとスクリーンショットを送信することができます。

… が、書籍のような表示しているコンテンツに価値があるもの、にとってはこれは脅威です。

Windows 8.1 のストアアプリの WinRT APIにはこれを防止するAPIがあります。

applicationView.isScreenCaptureEnabled = false;

ページのコンストラクタでこれを宣言すれば、このページのスクリーンショットを取れなくなります。

ちなみに、アプリ内で PrintScreen キーをフックする方法なども考えたことがありますが、KeyUp でフックできるものの、KeyDown の時点でもうスクリーンショットは撮られてれているので、KeyUp でフックしたらすぐにクリップボードに別のものを書きこむ、という手法が考えられます。しかし、クリップボードを監視して自動保存するようなユーティリティアが動いていたら厳しいですね。

なので上記の方法を使いましょう。