私は小さなC#プログラムを書いていますが、私のプログラムを使っている間に最終的なユーザーがスクリーンショットを撮りたくないのですか?または彼が1つを取る場合でも、どのように私はそれを知ることができますか?ユーザーがスクリーンショットを作成したかどうかはどのように知ることができますか?
ありがとうございます。これは、私のC#コーディングで私の経験が不足しているため、内容の不十分な質問であれば、ごめんなさい。
私は小さなC#プログラムを書いていますが、私のプログラムを使っている間に最終的なユーザーがスクリーンショットを撮りたくないのですか?または彼が1つを取る場合でも、どのように私はそれを知ることができますか?ユーザーがスクリーンショットを作成したかどうかはどのように知ることができますか?
ありがとうございます。これは、私のC#コーディングで私の経験が不足しているため、内容の不十分な質問であれば、ごめんなさい。
低レベルのキーボードフィルタを使用してシステム全体のキーボードフックを作成し、プリントスクリーンキーボードの組み合わせをキャンセルすることができます。しかし、誰かがヘルパーアプリケーション(Gadwinや何かのものなど)をインストールしていると、キーボードショートカットを捕まえるべきであることを事前に知ることができないため、ずっと難しくなります(ほとんどのツールで独自のフックを指定できます)。
サイドノート:システムの動作を変更することは一般的には好ましくありません。スクリーンショットはシステムの動作であり、トラブルシューティングの目的を果たします。これを防止すると、ユーザーはあなたにスクリーンショットを表示することができなくなります。しかし、もしあなたがそれをしなければならないなら、あなたはそれをすることができます。
EDIT:install an API hookです。すべてのスクリーンショットアプリケーションはAPI呼び出しを使用して、画面の一部の内容を取得します。しかし、APIフックは正しいものにするのが難しいです。おそらくユーザレベルのドライバを書くことによって、より些細なことになります。あなたはがのすべてを防ぐことができますが、それは本当にすべてのトラブルの価値がありますか?
仮想マシン、物理カメラ、およびその他のオプションのホストでは機能しません。これは時間の無駄です。 –
あなたの答えをありがとう、私はすぐにこれらのオプションをチェックアウトします!ユーザーがバーチャルマシンからスクリーンショットを取得している場合、この方法でSSを使用できなくなりますか?または、彼を検出することはできますか? – KingBOB
Usermode APIフックは、単にカーネルを直接呼び出すだけでバイパスすることができます。 – CodesInChaos
keyboard hookが必要な場合があります。しかし、ユーザーが「印刷画面」キーを押したかどうかを教えてくれます。プログラムでGDI関数を使ってスクリーンショットを撮る人はいません。
すべてスクリーンショットを撮る方法を防ぐことはできません。
一般的な答え:いいえこれは検出できません - 特にC#から。スクリーンショットを撮るには数十の方法があり、C++/WinAPIで書かれたアプリケーションでさえ、その一部しか検出できませんが、すべてではありません。
また、ユーザーが仮想マシンでアプリケーションを実行している場合はどうしたらいいですか?彼はホストマシン上でスクリーンショットを撮ることができ、あなたはこれを検出することも、防ぐことさえも全く行うことはできません。
大部分のケースを検出するのはかなり簡単です。また、C++で書くことができるものは、アンマネージアプリケーション(ドライバなど)を除いて、C#で記述することもできます。 WinAPIはC#からP/Invoke:http://pinvoke.netで使用できます。 +1); – Abel
P/Invokeは私のプログラムでは避けようとしています:)とにかく、そのコンテキストからGetDC(0)+イメージを取得する単純なGDIソフトウェアをどうやって検出しますか?私は何かを必要とするならば、30分で1つ書くことができます。 –
APIフックを使用してください。おそらくあなたのプログラムがクラッシュするでしょう。私はそのようなソフトウェアを書くことを示唆していませんが、OPはおそらく理由を求めてこれを尋ねました。 – Abel
...もし彼が写真カメラを使用していたら? – danyolgiax
これは、(ユーザーが十分に永続的な場合に)特に防ぐのは非常に難しいようです。 – ChristopheD
ユーザーがSnipping Toolを使用するとどうなりますか? –