• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 670
  • Last Modified:

how to add a hot key for a program in VB 2005

Im trying to create a "HOT KEY" to display a new page in my software program. For some reason the code below doe not get activated when i hold down the hot key combination.
Private Sub frmSearch_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.H And e.Modifiers = Keys.Control Then
            frmnewwindow.show
            e.Handled = True
        End If

    End Sub

Open in new window

0
cmdolcet
Asked:
cmdolcet
  • 6
  • 5
1 Solution
 
John (Yiannis) ToutountzoglouInstructor Multiengine PilotCommented:
try this

imports System.Windows.Form
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
        If e.KeyCode = System.Windows.Forms.Keys.F11 Then
            MsgBox("F11 Key was pressed")
        End If
    End Sub

'Or
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
        If e.KeyCode = Keys.Return Then
            MsgBox("Enter Key was pressed")
        End If
    End Sub

Open in new window

0
 
John (Yiannis) ToutountzoglouInstructor Multiengine PilotCommented:
Also thereis good code in here
http://www.daniweb.com/forums/thread133925.html
0
 
cmdolcetAuthor Commented:
jtoutou: I tried your code and neither one worked??? I will look at the link you provided by do you ahve a reason why they didn;t work?
0
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

 
John (Yiannis) ToutountzoglouInstructor Multiengine PilotCommented:
give this a try ...
it is ALT+E and Ctrl+F
..Also youmay read this
http://social.msdn.microsoft.com/Forums/en-US/vbide/thread/30b5caa4-35d5-4eec-b590-c2f041293fc9
Imports System.Runtime.InteropServices
 
Public Class Form1
 
    Public Const MOD_ALT As Integer = &H1 'Alt key
    Public Const MOD_Ctrl As Integer = &H2 'Ctrl 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.E)
 
        RegisterHotKey(Me.Handle, 200, MOD_Ctrl, Keys.F)
    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+E key combination")
                Case "200"
                    MessageBox.Show("You pressed Ctrl+F 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

Open in new window

0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
*Set the KeyPreview() Property of your FORM to True and your original code should work!...  =)
0
 
John (Yiannis) ToutountzoglouInstructor Multiengine PilotCommented:
ooooooo God!!!!!!!!   :)
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Lol...if he needs the "hotkey" to work OUTSIDE his app then he'll need your approach!  =)
*or a low-level keyboard hook...
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Ctrl-H is actually a BACKSPACE combo so if you're inside a TextBox it will do backspace entry for you.  Setting KeyPreview to True will allow you to trap the combo at the form level before it reaches the other controls.
0
 
John (Yiannis) ToutountzoglouInstructor Multiengine PilotCommented:
You are absolutelly Right!!!Thank you Very much!
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
You can also leave KeyPreview() False and do it this way intead:
Public Class Form1

    Private Const WM_KEYDOWN As Integer = &H100

    Protected Overrides Function ProcessKeyPreview(ByRef m As System.Windows.Forms.Message) As Boolean
        Select Case m.Msg
            Case WM_KEYDOWN
                If My.Computer.Keyboard.CtrlKeyDown AndAlso (Not My.Computer.Keyboard.AltKeyDown) Then
                    Select Case m.WParam.ToInt32
                        Case Keys.H
                            If My.Computer.Keyboard.CtrlKeyDown AndAlso Not My.Computer.Keyboard.AltKeyDown AndAlso Not My.Computer.Keyboard.ShiftKeyDown Then
                                frmnewwindow.Show()
                            End If
                            Return True ' <-- if you want to supress the keystroke as well

                            ' etc...

                    End Select
                End If

        End Select

        Return False
    End Function

End Class

Open in new window

0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Got crazy with the cut & paste in there...too many checks for Ctrl/Alt/Shift!  Hahaha....   =\

It should be:
Public Class Form1

    Private Const WM_KEYDOWN As Integer = &H100

    Protected Overrides Function ProcessKeyPreview(ByRef m As System.Windows.Forms.Message) As Boolean
        Select Case m.Msg
            Case WM_KEYDOWN
                Select Case m.WParam.ToInt32
                    Case Keys.H
                        If My.Computer.Keyboard.CtrlKeyDown AndAlso (Not My.Computer.Keyboard.AltKeyDown) AndAlso (Not My.Computer.Keyboard.ShiftKeyDown) Then
                            frmnewwindow.Show()
                            Return True ' <-- if you want to supress the keystroke as well

                            ' etc...
                        End If  
                End Select
        End Select

        Return False
    End Function

End Class

Open in new window

0
 
John (Yiannis) ToutountzoglouInstructor Multiengine PilotCommented:
@cmdolcet ...You Should Increase the points to maximum with "RESPECT" Accept @Idle's Solution!!!!!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now