2010-12-06 6 views
3

ここでは少し問題があります。自分が作成したアプリケーションを使用してデスクトップにスクリーンショットを保存します。そのためには、クリップボード上のどの画像がスクリーンショットからで、どの画像がコピーされたものであるかを認識する必要があります。しかし、私はそれをどうやって行うのか分かりません。私は答えを探しましたが、見つけませんでした。Cのスクリーンショットをクリップボードにコピーする方法

アプリケーションのアイデアは、いつでもバックグラウンドでアクティブになり、PrintScreenボタンを押すたびに直接デスクトップに画像を保存することです。

+0

私はこれが不可能だと確信しています。クリップボード上のスクリーンショット(PrtScnキーでそこに置く)は通常のビットマップのように見えます。 –

+0

でも、クリップボードにどのように乗っているのか分かりますか?だから誰かがクリップボードにprintscreenかcopyでそれを置くかどうか見てください。 – progRick

+0

安全な方法ではありません。 [クリップボードビューア](http://msdn.microsoft.com/en-us/library/ms649016)であることによって、クリップボードに置かれていることの通知を受け取ることができます。アプリケーションはOLEリンク付きのクリップボードに元の文書にデータを戻すことができますが、これはオプションであり、Windows PrtScnメカニズムはそれを認識しません。 –

答えて

4

なぜアプリケーションでスクリーンショットを撮って保存するだけですか?

これはおそらく、保存している画像があなたが望むスクリーンショットであることを確認する唯一の方法です。その付加情報に基づいて

bmp.Save("PATHANDFILENAME"); 

更新

、あなたは:

あなたがそうのようなBMPのスクリーンショットを作成することができます。その後、

Size s = Screen.PrimaryScreen.Bounds.Size; 
Bitmap bmp = new Bitmap(s.Width, s.Height); 
Graphics g = Graphics.FromImage(bmp); 
g.CopyFromScreen(0, 0, 0, 0, s); 

そして、このようにbmpファイルを保存しますスクリーンショットを保存し、グローバルキーボードフック(が提供されている)を使用する組み合わせを検討している可能性がありますTom)。フックを使用すると、押されている印刷画面をキャプチャし、現在の画面をキャプチャして保存することが可能になります。また、押されている印刷画面をキャンセルし、画面がクリップボードにコピーされないようにすることもできます。

+0

私はすでに私の質問を編集しました。私がPrintScreenボタンを押すと、それが直接動作するという考えがあります。したがって、Print Screenボタンを押したときにアプリケーションでイベントをトリガする方法がある場合は、これが良い解決策になります。 – progRick

+0

どのボタンが押されたかをホットキーで確認し、それが印刷画面ボタンであれば私のアプリケーションは印刷画面を作成してから画像を保存しました。ヘルプの人々に感謝します。 – progRick

1

実際のスクリーンショットと偽物を区別したい場合は、目には見えない小さな変化を埋め込むようにしてください。ただし、コードから検出することは可能です。フォームのクライアント領域には、(+ 3、+ 2、+ 1)のわずかに変更されたRGB値が表示されます。

ルックアップsteganography

0

興味深いことに、あなたはおそらく、クリップボードの変更をリッスンするために、このコードを組み合わせることができ:

http://codeguru.earthweb.com/columns/dotnettips/article.php/c7315/

いくつかの追加のコードで前KEYSTATEをチェックします。

global keyboard hookを使用すると、Ctrl + CまたはPrtScnを聞いてすぐにクリップボードを確認できます。もちろん、コメントが示唆するように、これは簡単ではありませんが、それはスタートです。

+0

それは個人的な使用のため、それはまだ完璧である必要はありません。 – progRick

関連する問題