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

cmdolcetAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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
Bootstrap 4: Exploring New Features

Learn how to use and navigate the new features included in Bootstrap 4, the most popular HTML, CSS, and JavaScript framework for developing responsive, mobile-first websites.

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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic.NET

From novice to tech pro — start learning today.