今回の、質問はVBで作成したアプリの画面を、
プリントスクリーンさせたくないです。
で、考えた問題としては、
問題1.プリントスクリーンを押されたら...
問題2.デスクトップのデバイスコンテキストから
画像データをアップロードされないか...
それで、考えた方法では、
<問題1に対する方法>
(1)DLLを作り、メッセージをフックし、
プリントスクリーンボタンを押せないようにできないか?
自アプリ、他アプリ、デスクトップでプリントスクリーンが、
押される可能性があると思ってます。
(2)最悪、プリントスクリーンされた場合ですが、
クリップボードを定期的に消去する。
(でも、恒久的な対策ではないですよね。)
<問題2に対する方法>
(3)まだ、対応策皆無です。
<現状>
問題1の対策(1)に取り組んでまして、自アプリに対する
メッセージはフックできたのですが、
画像はキャプチャされてしまっているです。
<環境>
WinXPです。
VBは現状VB6ですが、
上記が実現可能であれば、.NET、2005を
購入してもいいと思っています。
また、Vistaでの動作確認もとれれば、尚、可と考えます。
まだまだ、仕様決めの段階でつまづいてしまっていますが、
ご助力お願いいたします。
なんか適当ですけど。
自窓がアクティブの時はクリップボード監視して
自窓が非アクティブの場合自窓を隠す
前準備
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
なんだか随分困ってるみたいですね…
しかし、OSがウインドウ管理している(OSからウインドウハンドル等が
見える)以上、完全に防ぐのは無理な気がします。
自信は無いですが。
DirectXの画面は通常の方法ではプリントスクリーンできないような
話を以前聞いたような気もしますが、それも結局DirectX用の
スクリーンショットアプリ使えば撮れますし。
正直私は、そういうことを実現しているアプリというものを
見たことがありません。
ツイート | ![]() |