プリントスクリーンさせたくない


グラフ  2007-02-23 01:24:39  No: 135432

今回の、質問はVBで作成したアプリの画面を、
プリントスクリーンさせたくないです。

で、考えた問題としては、
問題1.プリントスクリーンを押されたら...
問題2.デスクトップのデバイスコンテキストから
        画像データをアップロードされないか...

それで、考えた方法では、
<問題1に対する方法>
(1)DLLを作り、メッセージをフックし、
   プリントスクリーンボタンを押せないようにできないか?
   自アプリ、他アプリ、デスクトップでプリントスクリーンが、
   押される可能性があると思ってます。
(2)最悪、プリントスクリーンされた場合ですが、
   クリップボードを定期的に消去する。
   (でも、恒久的な対策ではないですよね。)
<問題2に対する方法>
(3)まだ、対応策皆無です。

<現状>
問題1の対策(1)に取り組んでまして、自アプリに対する
メッセージはフックできたのですが、
画像はキャプチャされてしまっているです。

<環境>
WinXPです。
VBは現状VB6ですが、
上記が実現可能であれば、.NET、2005を
購入してもいいと思っています。
また、Vistaでの動作確認もとれれば、尚、可と考えます。

まだまだ、仕様決めの段階でつまづいてしまっていますが、
ご助力お願いいたします。


とおり巣鴨  2007-02-28 21:35:25  No: 135433

なんか適当ですけど。
自窓がアクティブの時はクリップボード監視して
自窓が非アクティブの場合自窓を隠す
前準備
Timer1とPicture1を用意する

Private Declare Function GetActiveWindow Lib "user32" () As Long

Private Sub Form_Load()
'自窓隠しようピクチャーボックス
Picture1.Width = Me.Width
Picture1.Height = Me.Height
Picture1.Top = 0
Picture1.Left = 0
Picture1.BackColor = vbWhite
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()

If GetActiveWindow <> Me.hWnd Then
    '自窓がアクティブじゃなければダミーピクチャーボックスで隠す
    Picture1.Visible = True
Else
    Picture1.Visible = False
    '自窓がアクティブの時にクリップボードにビットマップが入ったら消す
    If Clipboard.GetFormat(vbCFBitmap) Then Clipboard.Clear
End If
End Sub


そがっち  2007-02-28 22:48:07  No: 135434

なんだか随分困ってるみたいですね…
しかし、OSがウインドウ管理している(OSからウインドウハンドル等が
見える)以上、完全に防ぐのは無理な気がします。
自信は無いですが。
DirectXの画面は通常の方法ではプリントスクリーンできないような
話を以前聞いたような気もしますが、それも結局DirectX用の
スクリーンショットアプリ使えば撮れますし。
正直私は、そういうことを実現しているアプリというものを
見たことがありません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加