By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,247 Members | 1,165 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,247 IT Pros & Developers. It's quick & easy.

Global Keypress Event Handler

P: n/a
Hello everyone!

I am new to VB .Net and currently i'm using vb .net 2005. My question
is: Is there a way to assign a global key handler for a certain key,
like if i press F9 or any other key from any part of my program, a
function or sub would be invoked? I used to do programming in Clipper
and this done achieved by the Setkey( <nKey>, <bFunction) function.
Can this be done in VB .Net?
Thanks in advance!
diego

Oct 23 '08 #1
Share this Question
Share on Google+
3 Replies


P: n/a
hi,
here is an answer :

Public Class Form1
' If you just want the hot key, with no modifier

' use zero for the fsModifiers value (But this is a BAD IDEA).

Private Const NoModKey As Integer = 0

' Modifier key constants

Private Const MOD_ALT As Integer = 1

Private Const MOD_CONTROL As Integer = 2

Private Const MOD_SHIFT As Integer = 4

Private Const MOD_WIN As Integer = 8

' Value indicating Windows Message is a hot key.

Protected Friend Const WM_HOTKEY As Integer = 786

' Unique ID for the atomic hot key.

Protected Friend hotkeyID As Short

' Register hotkey

Protected Friend Declare Function RegisterHotKey Lib "user32" (ByVal
hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk
As Keys) As Integer

' Add global name for hotkey

Protected Friend Declare Function GlobalAddAtomA Lib "kernel32" (ByVal
lpString As String) As Short

' Delete hotkey atom.

Protected Friend Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal
nAtom As Integer) As Short

' Unregister hotkey.

Protected Friend Declare Function UnregisterHotKey Lib "user32" (ByVal
hwnd As IntPtr, ByVal id As Integer) As Integer

Private Sub hotkey_Load()

' GlobalAddAtom adds the String to the System global

' atom table, and returns a unique number to identify

' it the atom table.

hotkeyID = GlobalAddAtomA("GlobalHotKeyFor_MyUniqueAppName")

If hotkeyID = 0 Then

MessageBox.Show("Unable to generate the requested hotkey unique
ID.", "Error Making Hotkey ID")

Else

' Register the hot key combo used to show the form.

' I used Alt key modifier and the F1 key, Alt + F1,

' but you can use any key combo.

If RegisterHotKey(Me.Handle, hotkeyID, MOD_ALT, Keys.Delete) = 0
Then

MessageBox.Show("Unable to register the requested hotkey.",
"Error Registering Hotkey")

Else
'mettre la ligne suivante en commentaire pour la production
MessageBox.Show("The following Hotkey was registered for
this application: " & "Keys: Alt + F1", "Hot Key Registered")

End If

End If

End Sub

Private Sub Form1_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

' READ ME:

' You MUST unregister your Hot Key, or your application will leak
memory.

If Me.hotkeyID <0 Then

UnregisterHotKey(Me.Handle, hotkeyID)

' Also delete the hot key atom.

GlobalDeleteAtom(hotkeyID)

End If

End Sub

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

' Check for our Windows Message Hotkey.

If m.Msg = WM_HOTKEY Then

' Do something.

End If

' Return key messages to the application.

MyBase.WndProc(m)

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
hotkey_Load()
End Sub
End Class


"Appr3nt1c3" <gu**********@hotmail.comwrote in message
news:db**********************************@e38g2000 prn.googlegroups.com...
Hello everyone!

I am new to VB .Net and currently i'm using vb .net 2005. My question
is: Is there a way to assign a global key handler for a certain key,
like if i press F9 or any other key from any part of my program, a
function or sub would be invoked? I used to do programming in Clipper
and this done achieved by the Setkey( <nKey>, <bFunction) function.
Can this be done in VB .Net?
Thanks in advance!
diego
Oct 23 '08 #2

P: n/a
On 23 Okt, 20:59, "Gillard" <gillard_georges@@@@@@@@@hotmail.com>
wrote:
hi,
here is an answer :

Public Class Form1
* * ' If you just want the hot key, with no modifier

* * ' use zero for the fsModifiers value (But this is a BAD IDEA).

* * Private Const NoModKey As Integer = 0

* * ' Modifier key constants

* * Private Const MOD_ALT As Integer = 1

* * Private Const MOD_CONTROL As Integer = 2

* * Private Const MOD_SHIFT As Integer = 4

* * Private Const MOD_WIN As Integer = 8

* * ' Value indicating Windows Message is a hot key.

* * Protected Friend Const WM_HOTKEY As Integer = 786

* * ' Unique ID for the atomic hot key.

* * Protected Friend hotkeyID As Short

* * ' Register hotkey

* * Protected Friend Declare Function RegisterHotKey Lib "user32" (ByVal
hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk
As Keys) As Integer

* * ' Add global name for hotkey

* * Protected Friend Declare Function GlobalAddAtomA Lib "kernel32" (ByVal
lpString As String) As Short

* * ' Delete hotkey atom.

* * Protected Friend Declare Function GlobalDeleteAtom Lib "kernel32"(ByVal
nAtom As Integer) As Short

* * ' Unregister hotkey.

* * Protected Friend Declare Function UnregisterHotKey Lib "user32" (ByVal
hwnd As IntPtr, ByVal id As Integer) As Integer

* * Private Sub hotkey_Load()

* * * * ' GlobalAddAtom adds the String to the System global

* * * * ' atom table, and returns a unique number to identify

* * * * ' it the atom table.

* * * * hotkeyID = GlobalAddAtomA("GlobalHotKeyFor_MyUniqueAppName")

* * * * If hotkeyID = 0 Then

* * * * * * MessageBox.Show("Unable to generate the requestedhotkey unique
ID.", "Error Making Hotkey ID")

* * * * Else

* * * * * * ' Register the hot key combo used to show the form.

* * * * * * ' I used Alt key modifier and the F1 key, Alt + F1,

* * * * * * ' but you can use any key combo.

* * * * * * If RegisterHotKey(Me.Handle, hotkeyID, MOD_ALT, Keys.Delete) = 0
Then

* * * * * * * * MessageBox.Show("Unable to register the requested hotkey.",
"Error Registering Hotkey")

* * * * * * Else
* * * * * * * * 'mettre la ligne suivante en commentaire pour la production
* * * * * * * * MessageBox.Show("The following Hotkey wasregistered for
this application: " & "Keys: Alt + F1", "Hot Key Registered")

* * * * * * End If

* * * * End If

* * End Sub

* * Private Sub Form1_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

* * * * ' READ ME:

* * * * ' You MUST unregister your Hot Key, or your application will leak
memory.

* * * * If Me.hotkeyID <0 Then

* * * * * * UnregisterHotKey(Me.Handle, hotkeyID)

* * * * * * ' Also delete the hot key atom.

* * * * * * GlobalDeleteAtom(hotkeyID)

* * * * End If

* * End Sub

* * Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

* * * * ' Check for our Windows Message Hotkey.

* * * * If m.Msg = WM_HOTKEY Then

* * * * * * ' Do something.

* * * * * * * * * * End If

* * * * ' Return key messages to the application.

* * * * MyBase.WndProc(m)

* * End Sub

* * Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
* * * * * * *hotkey_Load()
* * * * * End Sub
End Class

"Appr3nt1c3" <guerrero....@hotmail.comwrote in message

news:db**********************************@e38g2000 prn.googlegroups.com...
Hello everyone!
I am new to VB .Net and currently i'm using vb .net 2005. My question
is: Is there a way to assign a global key handler for a certain key,
like if i press F9 or any other key from any part of my program, a
function or sub would be invoked? I used to do programming in Clipper
and this done achieved by the Setkey( <nKey>, <bFunction) function.
Can this be done in VB .Net?
Thanks in advance!
diego- Itago ang tekstong may panipi -

-Ipakita ang tekstong may panipi-
Thanks for your reply.

How is it done if my startup object is Sub Main()?

Thanks
Oct 23 '08 #3

P: n/a
On Thu, 23 Oct 2008 01:37:44 -0700 (PDT), Appr3nt1c3
<gu**********@hotmail.comwrote:
>Hello everyone!

I am new to VB .Net and currently i'm using vb .net 2005. My question
is: Is there a way to assign a global key handler for a certain key,
like if i press F9 or any other key from any part of my program, a
function or sub would be invoked? I used to do programming in Clipper
and this done achieved by the Setkey( <nKey>, <bFunction) function.
Can this be done in VB .Net?
You can register a message filter with Application.AddMessageFilter.
Oct 23 '08 #4

This discussion thread is closed

Replies have been disabled for this discussion.