【问题标题】:VB.Net Hidden Program HotkeysVB.Net 隐藏程序热键
【发布时间】:2016-11-24 04:05:22
【问题描述】:

有没有办法注册热键以从不可见(隐藏)程序切换表单?我已经厌倦了常规方法,它们仅在表单可见或活动窗口时才有效。提前感谢您的帮助!

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.KeyPreview = True
    Me.ShowInTaskbar = False
    Me.ShowIcon = False
    Me.Visible = False
End Sub

这是隐藏程序的代码。

【问题讨论】:

  • 这个“隐形/隐藏”程序是什么?我不知道在不了解该程序以及是否或如何修改程序以操纵表单的情况下如何回答这个问题...
  • 如果您要添加隐藏程序并将其作为进程运行的加载事件。但这也使热键也不起作用。 ' Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Me.KeyPreview = True Me.ShowInTaskbar = False Me.ShowIcon = False Me.Visible = False End Sub'
  • @Visual Vincent 那篇文章中提到的方法只适用于未隐藏的程序。
  • 不,它不仅适用于“未隐藏的程序”。你甚至读过标题吗?我自己回答了这个问题,我已经多次使用过这种方法。 GetAsyncKeyState() 无需您的程序可见/有焦点即可工作。

标签: vb.net keypress hotkeys


【解决方案1】:

您想使用全局热键。只需确保在程序关闭时取消注册即可。

来自过去帮助过我的 MSDN 文章:

首先,您需要知道虚拟键代码。

http://msdn2.microsoft.com/en-us/library/ms927178.aspx你可以 P/Invoke RegisterHotKey/UnregisterHotKey APIs 注册/取消注册 热键。代码示例:注册多个热键,例如 Alt+D, Alt+C 等

Imports System.Runtime.InteropServices

Public Class Form1

    Public Const MOD_ALT As Integer = &H1 'Alt key
    Public Const WM_HOTKEY As Integer = &H312

    <DllImport("User32.dll")> _
    Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, _
                        ByVal id As Integer, ByVal fsModifiers As Integer, _
                        ByVal vk As Integer) As Integer
    End Function

    <DllImport("User32.dll")> _
    Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, _
                        ByVal id As Integer) As Integer
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, _
                        ByVal e As System.EventArgs) Handles MyBase.Load
        RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D)
        RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C)
    End Sub

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = WM_HOTKEY Then
            Dim id As IntPtr = m.WParam
            Select Case (id.ToString)
                Case "100"
                    MessageBox.Show("You pressed ALT+D key combination")
                Case "200"
                    MessageBox.Show("You pressed ALT+C key combination")
            End Select
        End If
        MyBase.WndProc(m)
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As System.Object, _
                        ByVal e As System.Windows.Forms.FormClosingEventArgs) _
                        Handles MyBase.FormClosing
        UnregisterHotKey(Me.Handle, 100)
        UnregisterHotKey(Me.Handle, 200)
    End Sub

End Class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-07
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多