Solved

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

Posted on 2010-09-08
12
648 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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I think the Typed DataTable and Typed DataSet are very good options when working with data, but I don't like auto-generated code. First, I create an Abstract Class for my DataTables Common Code.  This class Inherits from DataTable. Also, it can …
A while ago, I was working on a Windows Forms application and I needed a special label control with reflection (glass) effect to show some titles in a stylish way. I've always enjoyed working with graphics, but it's never too clever to re-invent …
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

911 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

16 Experts available now in Live!

Get 1:1 Help Now