在vb.net中,无论激活的应用程序如何,都可以读取keydown
我之前问了一个关于vb.net的问题 我目前的问题是: 我创建了一个程序,每当同时按下某组键时,该程序就会执行某个操作。程序必须能够在后台、系统托盘或其他地方运行。本质上,这应该像表单上的键控事件一样工作,但本例中的表单就是一切在vb.net中,无论激活的应用程序如何,都可以读取keydown,vb.net,keydown,Vb.net,Keydown,我之前问了一个关于vb.net的问题 我目前的问题是: 我创建了一个程序,每当同时按下某组键时,该程序就会执行某个操作。程序必须能够在后台、系统托盘或其他地方运行。本质上,这应该像表单上的键控事件一样工作,但本例中的表单就是一切 我不确定是否有直接从.net API中执行此操作的方法,但如果有,我肯定没有找到它。如果不需要键盘挂钩,则需要注册热键。更易于实施,对系统资源的要求也更低。下面是一个例子,如果窗体被最小化,它会将窗体恢复到前台。请注意,您可以注册多个密钥: Imports System
我不确定是否有直接从.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。我会把这个问题留着,以防万一你或其他人能给出符合我要求的东西。呃,这只有在应用程序运行时才有效。如果你想要别的东西,那么你必须更好地解释你的需求。对不起,我误解了你的代码。我认为如果应用程序没有运行,它实际上会运行该应用程序。你的建议看起来不错,我试试看。