2015-12-24 68 views
1

我做了一個簡單的Windows用vb.net窗體應用程序,我的項目「Form1.vb的」的第一個元素包含常見的代碼,例如:防止「打印屏幕」在vb.net按鈕

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

我需要在我的應用程序禁用「打印屏幕」按鈕,我發現使用谷歌下面的代碼:

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關閉,鍵盤和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內置的屏幕捕獲軟件(剪切工具)。