2015-12-24 2 views
1

Я сделал простые окна формируют приложение с помощью vb.net, первый элемент моего проекта «Form1.vb» содержит общий код такой:предотвратить «трафаретная печать» кнопки в vb.net

Public Class Form1 
    Public Sub Form1_Load 
..... 
End Class 

мне нужно отключить «Print Screen» кнопку в моем приложении, и я нашел следующий код с помощью Google:

Option Explicit On 

Imports System.ComponentModel 
Imports System.Windows.Forms 
Imports System.Runtime.InteropServices 

Public Class HotKeyClass 
    Inherits Control 

    <DllImport("user32.dll")> _ 
    Private Shared Function RegisterHotKey(hWnd As IntPtr, id As Integer, fsModifiers As Integer, vk As Integer) As Boolean 
    End Function 

    <DllImport("user32.dll")> _ 
    Private Shared Function UnregisterHotKey(hWnd As IntPtr, id As Integer) As Boolean 
    End Function 

    <DllImport("user32.dll", SetLastError:=True)> _ 
    Private Shared Sub keybd_event(bVk As Byte, bScan As Byte, dwFlags As UInteger, dwExtraInfo As Integer) 
    End Sub 

    Public Event HotKeyPressed(Key As Keys, Modifer As HotKeyModifer) 

    Private Const KEYEVENTF_KEYUP = &H2 
    Private Const WM_HOTKEY = &H312 

    Private m_Modifer As Integer 
    Private m_Key As Integer 
    Private m_Id As Integer 

    'Конструктор 
    Sub New() 
     Me.BackColor = Color.Black 
     Me.Visible = False 
    End Sub 

    'Обработка сообщений 
    Protected Overrides Sub WndProc(ByRef m As Message) 
     If m.Msg = WM_HOTKEY Then 
      'Dim idHotKey As Integer = CInt(m.WParam) 'Получаем идентификатор комбинации 
      RaiseEvent HotKeyPressed(m_Key, m_Modifer) 
     End If 

     MyBase.WndProc(m) 
    End Sub 

    'Переопределяем, получаем уникальный ID 
    Public Overrides Function GetHashCode() As Integer 
     Return m_Modifer^m_Key^Me.Handle.ToInt32() 
    End Function 

    'Переопределяем, снять регистрацию клавиш 
    Protected Overrides Sub Dispose(disposing As Boolean) 
     UnregisterHotKey(Me.Handle, Me.GetType().GetHashCode()) 
     MyBase.Dispose(disposing) 
    End Sub 

    'Регистрация клавиш 
    Public Function Register(Key As Keys, Modifer As HotKeyModifer) As Boolean 
     m_Id = Me.GetHashCode() 
     m_Modifer = Modifer 
     m_Key = Key 

     Return RegisterHotKey(Me.Handle, m_Id, m_Modifer, m_Key) 
    End Function 

    'Снять регистрацию клавиш 
    Public Function Unregiser() As Boolean 
     Return UnregisterHotKey(Me.Handle, m_Id) 
    End Function 


    'Для эмуляции нажатия Ctrl + V 
    Public Shared Sub EmulateControlV() 
     keybd_event(Keys.ControlKey, 0, 0, 0) 
     keybd_event(Keys.V, 0, 0, 0) 
     keybd_event(Keys.V, 0, KEYEVENTF_KEYUP, 0) 
     keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0) 
    End Sub 

End Class 

<Flags> _ 
Public Enum HotKeyModifer As UInteger 
    NO_MODIFICATION = 0 
    ALT = 1 
    CONTROL = 2 
    SHIFT = 4 
    WIN = 8 
End Enum 

Теперь, как использовать этот код, чтобы обнаружить «экран печати» нажмите кнопку, чтобы остановить действие?

+1

Возможный дубликат [Отключение команды экрана печати] (http://stackoverflow.com/questions/23485438/disabling-print-screen-command). Также см. Http://stackoverflow.com/q/3889816/62576 –

+0

Для новичков это не материал начального уровня, знаете ли вы, что делает этот код и почему? Лучше всего знать, чтобы вы могли узнать, что не работает и почему **. Кроме того, что, если у пользователя есть программа захвата, это не остановит пользователя вообще от захвата того, что они хотят ... Просто мысль ... – Codexer

+0

Я никогда не видел так много приложений VB, которые охранялись ** Совершенно секретно **, что на экране для печати , Windows Shutdown, клавиатура и App Exit должны были быть отключены. – Plutonix

ответ

-2

Я уже сказал об этом здесь: https://stackoverflow.com/questions/34238442/how-to-disable-printscreen-functionality-on-32-bit-64-bit-machine/34238923#34238923 но, возможно, он должен повторять :-)

Вы можете отслеживать нажатия клавиш, и когда пользователь нажимает печать экрана (ключ код 44) выполнить Clipboard.Clear(). Это довольно бессмысленно, поскольку все, что вы делаете в своем приложении, не мешает пользователю делать снимки экрана с помощью мобильного телефона или использовать программное обеспечение для захвата экрана, которое встроено в Windows (инструмент для обрезки).