7

私はWindowsアプリケーションを書いています。スクリーンショットが撮られていることをどのように確認できますか? 押されたホットキーを検出する方法について読みましたが、100ミリ秒ごとに別のプログラムがスクリーンショットを撮っている場合が心配です。つまり、誰かが別のプログラム (たとえば、別の投稿で述べたように、ImageGrab を使用する Python プログラム) を作成したときに、アプリのスクリーンショットを常に取得し、それらを使用して情報を読み取ることに注意しようとしています。

スクリーンショットが撮られないようにすることはあまり気にしません。この動作に気づいたら、ユーザーを禁止できます。

これは可能ですか?WM_HOTKEYのように、アプリがスクリーンショットを撮るときに送信されるWindowsメッセージはありますか? それとも、ウィンドウは最新の描画イベントからの最新情報を使用し、それを他のプログラムに直接返すだけで、アプリはまったく気付かないのでしょうか?

4

10 に答える 10

31

あなたが何をしても、人々はそれを回避する方法を見つけるでしょう。アプリケーションのスクリーンショットを撮っている別のプログラムを確実に検出できるような方法が存在するとします。これを回避するには、VirtualBox をインストールし、VM 内でアプリケーションを実行してから、プログラムで VirtualBox (アプリケーションを含む) のスクリーンショットを取得します。アプリケーションは、写真が撮られていることを知る方法がまったくありません。

于 2009-04-21T22:31:14.220 に答える
7

ビデオカメラを使うとどうなりますか?コンピューターとモニターの間のビデオをキャプチャするとどうなりますか?

これを行うための実用的な方法があることを知って驚くでしょう。

于 2009-04-21T22:29:15.440 に答える
7

これはうまくいきません。それだけでなく、このレベルのセキュリティを提供しようとすると、正当なユーザーの 99% に不便が生じます。

おそらく、あなたの情報の不要な使用/コピーを特定し、その情報を使用している人々/企業にアプローチするという角度から問題にアプローチするのが最善です.

著作権法はこのアプローチに適していますが、このアプローチが利用できない場合があることを理解しています。

于 2009-04-21T22:42:02.713 に答える
4

SetWindowsHookExを使用してこれを行うことができます (確実ではありません) 。

完全な VB.NET の例を次に示します。

ただし、これを回避する方法はたくさんあります。あなたのフックの後にインストールされたフックは、あなたのフックを「オーバーライド」します。このスレッドで説明されているように、ユーザーはさまざまな方法で画面の写真を撮ることができます。これ以外の保護のためのオプションを検討しようと思います。

于 2009-04-22T00:24:50.407 に答える
3

まず、仮想マシンの使用に関するコメントはまったく無意味です。スクリーンショットが撮られていることを検出するよりも、仮想化で実行されているウィンドウを検出する方がはるかに簡単です。

スクリーンショットを困難にする良い方法は、祖先の dos エクステンダの下でフルスクリーン モードで実行するようにプログラムを書き直すことです。

スクリーンショットを撮ろうとしたユーザーの 95% を禁止する良い方法は、起動時に巨大な点滅バナー (「スクリーンショットは禁止されています! あなたは禁止されます!」) を表示し、その後の 15 秒間にユーザーが PrtScrn を押していることを検出することです。

于 2009-04-21T22:55:34.880 に答える
2

それを完全に止めるのはかなり難しいです.十分に決定されたユーザーは、デジタルカメラで画面の写真を撮ることができます.

于 2009-04-21T22:30:25.297 に答える
2

これを達成することが不可能だと私が考えるもう1つの理由は次のとおりです。

昔、Windows Media Player のコンテンツのスクリーン キャプチャを作成できませんでした。これは、WMP がそのコンテンツをビデオカードにすぐにストリーミングしたためです (と思いました)。(詳細: スクリーン キャプチャを貼り付けた後、ビデオは引き続き MS ペイントで再生されますが、画像を保存すると、最終的に黒い四角が表示されます)。とにかく、VNC を使用すると、画面キャプチャが非常に簡単になりました。

于 2009-04-21T22:57:46.747 に答える
1

私が通常 (C# から) スクリーンショットを撮る方法は、多くのスクリーン ペインティングの基礎となる BitBlt を呼び出すことです。おそらくシステム上のすべてのプログラムが低レベルでそれを使用するため、意味のある方法で呼び出しを傍受する方法がわからない.

于 2009-04-21T22:30:05.377 に答える
1

仮想マシンのウィンドウでいつでもプログラムを実行でき、外部プラットフォームでキャプチャ プログラムを使用できるため、実際にはできないと思います。これが起こっているかどうかを知ることは非常に困難です。特別なレンダリング ペースやインターレース、特別なコントラストなどについてもっと考えることをお勧めします。

また、出力を映画のように画面に表示し、低レートおよび解像度のエンコーダーでエンコードして、100 ミリ秒ごとの静止画のキャプチャが非常に低品質で無価値になるようにすることもできます。(低品質の映画をフリーズしたことがありますか?)

ただし、他の方法で情報を保護することを検討する必要があります。

于 2009-04-21T22:34:19.907 に答える
-1

それを止めるかもしれないと思う方法が1つあります。たとえば、複製時にグラフィック表示をぼかす技術について学びます。

デジタル カメラで撮影したスクリーンショット 仮想 OS からのスクリーンショット。

あなたが何百万人もの人々を作る何かを発明するかもしれないことを知っている人は、それで遊んでください。

于 2009-06-06T02:37:17.753 に答える