473,386 Members | 1,764 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,386 software developers and data experts.

Global Keypress Event Handler

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
3 8190
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
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
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 thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Darryn Ross | last post by:
Hi, I am trying to catch the KeyPress event on my datagrid but it isn't working... i have also tried registering the handler with the event like this... dgGLBatch.KeyPress += new...
3
by: Raul M. Colon | last post by:
Is possible to assign a click event to a button control in a Web form just pressing the return key? Something like windows forms where you can assign this action to a default control. For example,...
3
by: tafs7 | last post by:
My code below is supposed to email me when an error occurs on the application, but it's not emailing anything. Am I missing something? I know the smtp servers I've tried work. I even added a...
6
by: Niksa Baldun | last post by:
Hi, I am trying to capture data from magnetic stripe reader which is connected via keyboard interface (therefore indistinguishable from normal keyboard input). Basically, I am doing the...
3
by: Nikolay Evseev | last post by:
Hi, I am trying to trace down the Enter key in my Form.KeyPress event handler. The KeyPreview property is set to false, so I'd assume that all key presses should go through my form's KeyPress...
0
by: kryptomoon | last post by:
I have a KeyPress event handler for a MaskedTextBox control. According to the event documentation, if I set e.Handled to 'true' it should discard the input character, but it doesn't. After the...
3
by: windy | last post by:
I got a question about keypress event on textbox: I found that the keypress event doesn't invoked when i press the "." button on alphabetic keyboard, however if i use numberpad's "." button...
3
by: thomson | last post by:
Hi All, i do have an website with the URL http://localhost/application/ASEAN-ANZ, Once i hit the application, it goes to the Global.asax. but after that if i tried to change the URL...
2
by: Tony Johansson | last post by:
Hello! I have created a Control that consist of a label and a textbox.I have called this class ctlLabelTextbox. public partial class ctlLabelTextbox : UserControl { .... } The class that I...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.