簡體   English   中英

在Keyboard Tester應用程序VB NET中檢測打印屏幕的上,下鍵

[英]Detect Print Screen keyup and keydown in Keyboard Tester app VB NET

當我嘗試為我的小型辦公室制作Keyboard Tester應用程序時遇到問題。 我無法檢測到打印屏幕鍵碼e.keycode = keys.PrintScreen。

按下某個鍵時,我將執行一些操作,如更改圖片框的背景色,但似乎不適用於打印屏幕,什么也沒發生。

我的代碼是:

 Private Sub keyboardmenu_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    'Esc + Function Keys -----------------------------------------
    If e.KeyCode = Keys.Escape Then
        EscBox.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F1 Then
        F1Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F2 Then
        F2Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F3 Then
        F3Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F4 Then
        F4Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F5 Then
        F5Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F6 Then
        F6Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F7 Then
        F7Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F8 Then
        F8Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F9 Then
        F9Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F10 Then
        F10Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F11 Then
        F11Box.BackColor = Color.Red
    End If
    If e.KeyCode = Keys.F12 Then
        F12Box.BackColor = Color.Red
    End If
    'End of Esc + Function Keys -----------------------------------------


Private Sub keyboardmenu_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp

    'Esc + Function Keys ----------------------------------------

    If e.KeyCode = Keys.F1 Then
        F1Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F2 Then
        F2Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F3 Then
        F3Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F4 Then
        F4Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F5 Then
        F5Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F6 Then
        F6Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F7 Then
        F7Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F8 Then
        F8Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F9 Then
        F9Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F10 Then
        F10Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F11 Then
        F11Box.BackColor = Color.Transparent
    End If
    If e.KeyCode = Keys.F12 Then
        F12Box.BackColor = Color.Transparent
    End If
    'End of Esc + Function Keys -----------------------------------------

End Sub

請幫我。 如果有更多按鍵(如打印屏幕問題),則為Idk。

謝謝

我不確定真正的原因,但是我之前已經讀過它,得出的結論是Windows正在保護該鍵的事件免於輕易處理。 也許其他人知道的更好,但這可行:

Protected Overrides Function ProcessKeyEventArgs(ByRef msg As Message) As Boolean
    If msg.WParam = Keys.PrintScreen Then
        MessageBox.Show("PrintScreen key press detected!")
    End If

    Return MyBase.ProcessKeyEventArgs(msg)
End Function

另外,您應該將所有這些if語句放入Select Case語句中:

Private Sub keyboardmenu_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown

    Select Case e.KeyCode
        Case Keys.Escape
            EscBox.BackColor = Color.Red
        Case Keys.F1
            F1Box.BackColor = Color.Red
        Case Keys.F2
            F2Box.BackColor = Color.Red
            'Etc
    End Select

End Sub

該評論是關於IF陳述和CASE建議的,否則我同意Keith的回答。

我經常使用這種方法,但是放所有這些IF語句或Case語句是很瘋狂的:只需將框命名為與枚舉匹配,然后(假定Controls是所有框的父容器)

Controls(e.keycode.tostring & "box").backcolor = Color.Red

Controls(e.keycode.tostring & "box").backcolor = Color.Transparent

這一行將替換所有內容(如果將escbox重命名為escapebox)

當然,您可能想做一些檢查,例如

If Controls.ContainsKey(e.keycode.tostring & "box") Then ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM