2016-07-20 21 views
-2

Gibt es eine Möglichkeit, Hotkeys zu registrieren, um ein Formular aus einem unsichtbaren (versteckten) Programm umzuschalten? Ich habe normale Methoden müde und sie funktionieren nur, wenn das Formular entweder sichtbar ist oder das aktive Fenster. Vielen Dank im Voraus für jede Hilfe!VB.Net Versteckte Programm Hotkeys

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 

Dies ist der Code, der das Programm versteckt.

+0

Was ist diese "unsichtbare/hidden" Programm? Ich weiß nicht, wie man diese Frage beantworten könnte, ohne mehr über das Programm zu wissen und ob oder wie man das Programm ändern könnte, um das Formular zu manipulieren ... –

+0

Mögliche Duplikate von [Taste anhören, wenn das Programm in der Hintergrundprozess] (http://stackoverflow.com/questions/38153300/listen-to-key-press-when-the-program-is-in-the-background-process) –

+0

Wenn Sie dieses Load-Ereignis hinzufügen, dass verbirgt das Programm und führt es als Prozess aus. Aber es lässt auch die Hotkeys nicht funktionieren. 'Private Sub Button1_Click (Absender als Gegenstand, e As EventArgs) Griffe Button1.Click Me.KeyPreview = True Me.ShowInTaskbar = False Me.ShowIcon = False Me.Visible = False End Sub' – gregknight

Antwort

1

Sie möchten globale Hotkeys verwenden. Stellen Sie sicher, dass Sie die Registrierung beim Beenden des Programms aufheben.

Von einem MSDN-Artikel, die mir in der Vergangenheit geholfen:

Zum einen müssen Sie die Virtuelle-Key Codes kennen.

http://msdn2.microsoft.com/en-us/library/ms927178.aspx Sie können dann P/Invoke RegisterHotKey/UnregisterHotKey APIs/Unregister die Hotkey zu registrieren. Codebeispiel: mehrere Hotkeys Register wie Alt + D, Alt + C usw.

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