【问题标题】:Detect when some key press and release检测某个键按下和释放的时间
【发布时间】:2013-10-16 14:48:35
【问题描述】:

我很难找到一种方法来做到这一点

我希望我的应用程序在按键时执行一些操作。例如,当用户按下 F1 时,只要 F1 仍然按下它就会发送 F1 键,当用户释放 F1 时它不会发送 F1 键。

找不到检测用户何时释放按键的方法

以及如何根据keypress自动检测key press和sendkeys??

感谢您的帮助

【问题讨论】:

  • 没有意义,F1键已经这样了。
  • 我的意思是当我按下例如e 时它会执行 F1 直到 e 发布

标签: vb.net


【解决方案1】:

首先,为了获得类似的工作,您需要为表单设置KeyPreview = True。接下来,您可能想要使用 KeyDown 事件。捕获任何键 (Keys.F1),只要键按下,您就会收到 keydown 事件以发送垃圾邮件 F1。

我们今天有一个关于键盘陷阱的特别节目。 See this 也是如此。除此之外,您将不得不自己尝试其中的一些。你就是这样学习的。当您遇到困难时,发布您的代码。

您还可以在此处搜索标记为 VB NET/6 的 60,059 个问题以查找示例。

【讨论】:

  • 感谢您的帮助。
  • 先生,我找到了一种方法......但它仍然不能像我想要的那样工作......你能帮我吗??
【解决方案2】:

我已经找到方法了

我会在这里发布代码,所以如果有人在寻找它,这就是答案

Imports System.Windows.Forms
Imports MouseKeyboardActivityMonitor
Imports MouseKeyboardActivityMonitor.WinApi
Imports System.Runtime.InteropServices.DllImportAttribute
Imports System.Runtime.InteropServices
Imports System.ComponentModel
Imports System

Public Class Form1
Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Keys) As Integer

<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function SendInput(ByVal nInputs As Integer, ByRef pInputs As NativeMethods.INPUT, ByVal cbSize As Integer) As Integer
End Function
Public Declare Sub mouse_event Lib "User32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up

Private Sub DoKeyBoard(ByVal flags As NativeMethods.KEYEVENTF, ByVal key As Keys)
    Dim input As NativeMethods.INPUT
    Dim ki As NativeMethods.KEYBDINPUT
    input.type = NativeMethods.InputType.Keyboard
    input.u.ki = ki
    input.u.ki.wVk = Convert.ToInt16(key)
    input.u.ki.wScan = 0
    input.u.ki.time = 0
    input.u.ki.dwFlags = flags
    input.u.ki.dwExtraInfo = IntPtr.Zero
    Dim cbSize As Integer = Marshal.SizeOf(GetType(NativeMethods.INPUT))
    Dim result As Integer = NativeMethods.SendInput(1, input, cbSize)
    If result = 0 Then Debug.WriteLine(Marshal.GetLastWin32Error)
End Sub

Private WithEvents myKeyboardHookManager As KeyboardHookListener
Dim hookEnabled As Boolean
Public Sub New()
    InitializeComponent()
    myKeyboardHookManager = New KeyboardHookListener(New GlobalHooker())
    myKeyboardHookManager.

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2017-03-22
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多