Keyboard Hooking including Unicode

  • Thread starter Thread starter Alex Maghen
  • Start date Start date
A

Alex Maghen

I have been experimenting with sample code recommended by some folks on MSDN
for globally hooking the Keyboard in C#. The sample is by Michael Kennedy and
it's a System Hook class library.

Anyway, his class does the job of allowing me to receive Key-Down and Key-Up
events globally (as well as mouse stuff that I'm not really interested in
right now). But it doesn't give me what I really need.

What I'm really looking for is a C# class that will allow me to globally
handle events where I am passed the Keyboard "Text Input" as opposed to the
keyboard keys that are pressed. What I mean is that if the user had pressed a
lower-case "d" or an uppoer-case "D", I'd like to receive it that way... but
far more complicated than that, if they had pressed a key in a different
language kayboard, I'd like to receive that character in unicode. In other
words, I want to receive the TEXT character pressed or sent to the event
queue as opposed to receiving the hardware KEY pressed.

Any help - or especially code I could... "borrow"... would be *much*
appreciated!

Alex
 
I have been experimenting with sample code recommended by some folks on MSDN
for globally hooking the Keyboard in C#. The sample is by Michael Kennedy and
it's a System Hook class library.

Anyway, his class does the job of allowing me to receive Key-Down and Key-Up
events globally (as well as mouse stuff that I'm not really interested in
right now). But it doesn't give me what I really need.

What I'm really looking for is a C# class that will allow me to globally
handle events where I am passed the Keyboard "Text Input" as opposed to the
keyboard keys that are pressed. What I mean is that if the user had pressed a
lower-case "d" or an uppoer-case "D", I'd like to receive it that way... but
far more complicated than that, if they had pressed a key in a different
language kayboard, I'd like to receive that character in unicode. In other
words, I want to receive the TEXT character pressed or sent to the event
queue as opposed to receiving the hardware KEY pressed.

Any help - or especially code I could... "borrow"... would be *much*
appreciated!

Alex

Hi Alex,

In the properties of your form, set the KeyPreview property to True,
then create an event handler for the KeyPress event, in which you can
obtain the character pressed as a simple Unicode char, e.g :

Debug.WriteLine(e.KeyChar);

It works with a french keyboard with accented letters, so I guess it
should work with all sorts of keyboards. Setting the KeyPreview
property to True simply enables your Form to intercept keyboard
strokes, whichever control has the focus at that time.

HTH,

Michel
 
Hi Alex,

I searched the codeproject web site and found a C# class that processes
global mouse and keyboard hooks.

You may get more information from the below link:
'Processing Global Mouse and Keyboard Hooks in C#'
http://www.codeproject.com/KB/cs/globalhook.aspx
What I'm really looking for is a C# class that will allow me to globally
handle events where I am passed the Keyboard "Text Input" as opposed to the
keyboard keys that are pressed.

This is a high-level function that some controls implement, e.g. TextBox.
When we press the key "a", a lower case "a" appears in a TexBox. If we are
pressing the Shift key, a upper case "A" appears in the TextBox. However,
in the original Windows message level, we only receives WM_KEYDOWN and
WM_KEYUP messages.

The sample I suggest above converts the low-level keyboard events to
high-level keyboard events, ie. KeyUp, KeyDown and KeyPress. You can get
the "Text Input" by the KeyChar property of the KeyPressEventArgs parameter
in the KeyPress event handler.
if they had pressed a key in a different language kayboard, I'd like to
receive that character in unicode.

In the sample I suggest abvove, the class provides a KeyPress event. You
can use the KeyPressEventArgs KeyChar property the KeyPress event brings to
get the character in unicode.

Hope this helps.
If you have any question, please feel free to let me know.


Sincerely,
Linda Liu
Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
Back
Top