Solved

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

Posted on 2010-09-08
12
643 Views
Last Modified: 2012-05-10
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
Comment
Question by:cmdolcet
  • 6
  • 5
12 Comments
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33628198
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
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33628219
Also thereis good code in here
http://www.daniweb.com/forums/thread133925.html
0
 

Author Comment

by:cmdolcet
ID: 33628316
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
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33628406
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
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 125 total points
ID: 33629126
*Set the KeyPreview() Property of your FORM to True and your original code should work!...  =)
0
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33629155
ooooooo God!!!!!!!!   :)
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 33629163
Lol...if he needs the "hotkey" to work OUTSIDE his app then he'll need your approach!  =)
*or a low-level keyboard hook...
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 33629176
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
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33629181
You are absolutelly Right!!!Thank you Very much!
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 33629212
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
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 33629235
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
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33629243
@cmdolcet ...You Should Increase the points to maximum with "RESPECT" Accept @Idle's Solution!!!!!
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Since .Net 2.0, Visual Basic has made it easy to create a splash screen and set it via the "Splash Screen" drop down in the Project Properties.  A splash screen set in this manner is automatically created, displayed and closed by the framework itsel…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now