Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vb.net中,无论激活的应用程序如何,都可以读取keydown_Vb.net_Keydown - Fatal编程技术网

在vb.net中,无论激活的应用程序如何,都可以读取keydown

在vb.net中,无论激活的应用程序如何,都可以读取keydown,vb.net,keydown,Vb.net,Keydown,我之前问了一个关于vb.net的问题 我目前的问题是: 我创建了一个程序,每当同时按下某组键时,该程序就会执行某个操作。程序必须能够在后台、系统托盘或其他地方运行。本质上,这应该像表单上的键控事件一样工作,但本例中的表单就是一切 我不确定是否有直接从.net API中执行此操作的方法,但如果有,我肯定没有找到它。如果不需要键盘挂钩,则需要注册热键。更易于实施,对系统资源的要求也更低。下面是一个例子,如果窗体被最小化,它会将窗体恢复到前台。请注意,您可以注册多个密钥: Imports System

我之前问了一个关于vb.net的问题

我目前的问题是:

我创建了一个程序,每当同时按下某组键时,该程序就会执行某个操作。程序必须能够在后台、系统托盘或其他地方运行。本质上,这应该像表单上的键控事件一样工作,但本例中的表单就是一切


我不确定是否有直接从.net API中执行此操作的方法,但如果有,我肯定没有找到它。

如果不需要键盘挂钩,则需要注册热键。更易于实施,对系统资源的要求也更低。下面是一个例子,如果窗体被最小化,它会将窗体恢复到前台。请注意,您可以注册多个密钥:

Imports System.Runtime.InteropServices
Imports System.ComponentModel

Public Class Form1
  Private Const cHotKeyId As Integer = 0

  Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
    '--- Register Ctrl + Shift + U as a hot key
    If Not RegisterHotKey(Me.Handle, cHotKeyId, MOD_CONTROL + MOD_SHIFT, Keys.U) Then
      Throw New Win32Exception()
    End If
    MyBase.OnLoad(e)
  End Sub

  Protected Overrides Sub OnFormClosing(ByVal e As System.Windows.Forms.FormClosingEventArgs)
    UnregisterHotKey(Me.Handle, cHotKeyId)
    MyBase.OnFormClosing(e)
  End Sub

  Protected Overrides Sub WndProc(ByRef m As Message)
    Console.WriteLine(m.ToString())
    If (m.Msg = WM_HOTKEY AndAlso m.WParam = CType(cHotKeyId, IntPtr)) Then
      Me.Visible = True
      If Me.WindowState = FormWindowState.Minimized Then Me.WindowState = FormWindowState.Normal
      SetForegroundWindow(Me.Handle)
    End If
    MyBase.WndProc(m)
  End Sub

  '--- P/Invoke declarations
  Private Const WM_HOTKEY As Integer = &H312
  Private Const MOD_ALT As Integer = &H1
  Private Const MOD_CONTROL As Integer = &H2
  Private Const MOD_SHIFT As Integer = &H4
  Private Declare Function RegisterHotKey Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Boolean
  Private Declare Function UnregisterHotKey Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal id As Integer) As Boolean
  Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As IntPtr) As Boolean

End Class

我只希望它在应用程序运行时激活,而不是在应用程序未运行时激活。(你的代码有什么方法可以做到这一点吗?)不,我不想要键盘挂钩,我更喜欢实际的按键事件。不过,无论哪种方法,它基本上都能实现我想要的+1。我会把这个问题留着,以防万一你或其他人能给出符合我要求的东西。呃,这只有在应用程序运行时才有效。如果你想要别的东西,那么你必须更好地解释你的需求。对不起,我误解了你的代码。我认为如果应用程序没有运行,它实际上会运行该应用程序。你的建议看起来不错,我试试看。