2016-07-20 7 views
-2

Есть ли способ зарегистрировать горячие клавиши для переключения формы из невидимой (скрытой) программы? Я устал от обычных методов, и они работают только тогда, когда форма либо видна, либо активное окно. Спасибо заранее за любую помощь!Горячие клавиши для скрытых программ VB.Net

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 

Это код, который скрывает программу.

+0

Что это программа "невидимый/скрытый"? Я не знаю, как можно было бы ответить на этот вопрос, не зная больше об этой программе и не изменяя или не изменяя программу для управления вашей формой ... –

+0

Возможный дубликат [Слушать нажатие клавиши, когда программа находится в фоновый процесс] (http://stackoverflow.com/questions/38153300/listen-to-key-press-when-the-program-is-in-the-background-process) –

+0

Если вы должны добавить это событие загрузки, которое скрывает программу и запускает ее как процесс. Но это также делает горячие клавиши неработоспособными. 'Private Sub Button1_Click (отправитель As Object, е Как EventArgs) Ручки Button1.Click Me.KeyPreview = True Me.ShowInTaskbar = False Me.ShowIcon = False Me.Visible = False End Sub ' – gregknight

ответ

1

Вы хотите использовать глобальные горячие клавиши. Просто убедитесь, что вы отменили регистрацию, когда программа закрывается.

Из статьи MSDN, которые помогли мне в прошлом:

Во-первых, вам нужно знать Virtual-кодов ключей.

http://msdn2.microsoft.com/en-us/library/ms927178.aspx Вы можете P/Invoke RegisterHotkey/UnregisterHotKey API, чтобы зарегистрировать/Разрегистрировать горячую клавишу. Пример кода: Регистрация несколько горячих клавиш, такие как 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