Neste artigo vou mostrar uma forma de evitar que imagens de sua aplicação sejam copiadas com Print Screen em aplicações VB .NET. |
Se você precisar proteger suas imagens em um programa VB .NET do Print Screen pode usar o recurso que será mostrado neste artigo.
Ele não é infalível e um usuário com conhecimentos mais avançado poderá desabilitar o recurso mas é uma opção visto que pode proteger suas imagens da maioria das pessoas. (É claro que basta tirar uma foto da imagem que a proteção não funcionará).
O código de proteção utiliza o namespace System.Runtime.InteropServices e a função SetWindowDisplayAffinity que armazena a configuração de afinidade do display no Kernel no hWnd associado com a janela.
Esta função e a função GetWindowDisplayAffinity foram projetadas para suportar o recurso de proteção de conteúdo da janela do Windows 7, e permite que os aplicativos protejam os seus conteúdos de janela na tela de ser capturado ou copiado através de um conjunto específico de recursos do sistema operacional.
No
entanto, ele só funciona quando o Desktop Window Manager (DWM) está
compondo o ambiente de trabalho.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
Selecione a linguagem Visual Basic e o template Windows Forms Application
Informe o nome Disable_PrintScreen e clique no botão OK;
No formulário form1.vb inclua um controle PictureBox - picImagem e defina uma imagem qualquer que iremos usar para testar a proteção.
Inclua também um controle CheckBox - chkProtege - com o texto - Ativar Proteção.
Disponha os controles conforme a figura a seguir:
Criando a classe para proteger contra o Print Screen
No menu Project clique em Add Class e informe o nome Protecao.vb.
A seguir inclua o código a seguir nesta classe :
Imports System.Runtime.InteropServices
Public Class Protecao
Private Const WDA_NONE As UInteger = &H0
Private Const WDA_MONITOR As UInteger = &H1
<DllImport("user32.dll")>
Private Shared Function SetWindowDisplayAffinity(ByVal hWnd As IntPtr, ByVal dwAffinity As UInteger) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
Public Shared Function ProtecaoContraPrintScreen(ByVal winForm As Form, ByVal Protege As Boolean) As Boolean
Dim resultado As Boolean = False
If winForm IsNot Nothing Then
If Protege Then
resultado = SetWindowDisplayAffinity(winForm.Handle, WDA_MONITOR)
Else
resultado = SetWindowDisplayAffinity(winForm.Handle, WDA_NONE)
End If
End If
Return result
End Function
End Class
|
Vamos entender o código:
Usamos o atributo DllImport() para importar as funções que vamos usar da API "user32.dll".
A seguir usamos a função SetWindowDisplayAffinity() para proteger um formulário contra a ação do Print Screen.
O método ProtecaoContraPrintScreen() usa a função e recebe define dois parâmetros:
Se o valor de protege for True então o valor WDA_MONITOR é usado o que indica para exibir o conteúdo do formulário somente no monitor.
Se o valor for False o valor WDA_NONE é usado o que indica para remover a afinidade com o monitor.
Para concluir defina o código a seguir no evento ChechedChanged do checkbox:
Private Sub chkProtege_CheckedChanged(sender As Object, e As EventArgs) Handles chkProtege.CheckedChanged
If Not Protecao.ProtecaoContraPrintScreen(Me, chkProtege.Checked) Then
Me.Text = "Proteção Falhou..."
End If
End Sub
|
O código apenas habilita a proteção quando o checkbox for marcado passando a instância do formulário a ser protegido(Me) e o valor True.
Agora é só alegria...
Executando o projeto e selecionando o checkbox iremos proteger a imagem de um Print Screen conforme mostrado a seguir:
Pegue o projeto completo aqui : Disable_PrintScreen.zip
"Portanto nós também, pois que estamos
rodeados de uma tão grande nuvem de testemunhas, deixemos todo o embaraço, e o
pecado que tão de perto nos rodeia, e corramos com paciência a carreira que nos
está proposta,"
Hebreus 12:1
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Protegendo as informações da sua string de conexão - Macoratti.net
NET - Protegendo os seus dados (Criptografia) - Macoratti.net