473,785 Members | 2,300 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Keyboard State

Is there a .Net equivalent of the GetKeyboardStat e api?

I need to know whether the user is pressing the Ctrl or Shift keys when they
click on my usercontrol.

Thanks
Steve
Mar 29 '06 #1
6 17856
Over ride the key down event like this.
protected override void OnKeyDown(KeyEv entArgs e)
{
base.OnKeyDown( e);
}

From the key event argument, you can check the key code.

Steve Barnett wrote:
Is there a .Net equivalent of the GetKeyboardStat e api?

I need to know whether the user is pressing the Ctrl or Shift keys when they
click on my usercontrol.

Thanks
Steve

Mar 29 '06 #2
Hi,

You could explore two ways, one is intercepting the KeyDown event and
checkng the KeyEventArg properties for the status of the keys.

Another solution can be in the Click handler to check for the status by
P/invoking GetKeyboardStat e:
[DllImport("user 32.dll")]
public static extern int GetKeyboardStat e(byte [] lpKeyState);

byte[] bCharData = new byte[256];
GetKeyboardStat e(bCharData);

You have to know the index of the keys you want, take a look in the .H
files
--
Ignacio Machin,
ignacio.machin AT dot.state.fl.us
Florida Department Of Transportation

"Steve Barnett" <no****@nodomai n.com> wrote in message
news:%2******** ********@TK2MSF TNGP12.phx.gbl. ..
Is there a .Net equivalent of the GetKeyboardStat e api?

I need to know whether the user is pressing the Ctrl or Shift keys when
they click on my usercontrol.

Thanks
Steve

Mar 29 '06 #3
I need to know the keyboard state when the mouse is clicked.

Steve
"Jianwei Sun" <js***********@ gmail.com> wrote in message
news:OR******** *****@TK2MSFTNG P11.phx.gbl...
Over ride the key down event like this.
protected override void OnKeyDown(KeyEv entArgs e)
{
base.OnKeyDown( e);
}

From the key event argument, you can check the key code.

Steve Barnett wrote:
Is there a .Net equivalent of the GetKeyboardStat e api?

I need to know whether the user is pressing the Ctrl or Shift keys when
they click on my usercontrol.

Thanks
Steve

Mar 30 '06 #4
Thanks for the suggestion. I'm kind of new to .Net development so am
struggling to know what's available via the supplied classes and what I need
to code API calls for. I checked out GetKeyboardStat e and decided to go with
GetKeyState in the end, as it's more specific.

For what it's worth, I created a Keyboard class to encapsulate the
functionality I needed. The key definitions were found on the pinvoke web
site. This gives me a simple test:
If (Keyboard.IsKey Pressed(Keyboar d.VK_CONTROL))

using System;
using System.Runtime. InteropServices ;

namespace Keyboard
{
class Keyboard
{
[DllImport("user 32.dll")]
static extern short GetKeyState(Vir tualKeyStates nVirtKey);

public static bool IsKeyPressed(Vi rtualKeyStates testKey)
{
bool keyPressed = false;
short result= GetKeyState(tes tKey);

switch (result)
{
case 0:
// Not pressed and not toggled on.
keyPressed = false;
break;

case 1:
// Not pressed, but toggled on
keyPressed = false;
break;

default:
// Pressed (and may be toggled on)
keyPressed = true;
break;
}

return keyPressed;
}

public enum VirtualKeyState s : int
{
VK_LBUTTON = 0x01,
VK_RBUTTON = 0x02,
VK_CANCEL = 0x03,
VK_MBUTTON = 0x04,
//
VK_XBUTTON1 = 0x05,
VK_XBUTTON2 = 0x06,
//
VK_BACK = 0x08,
VK_TAB = 0x09,
//
VK_CLEAR = 0x0C,
VK_RETURN = 0x0D,
//
VK_SHIFT = 0x10,
VK_CONTROL = 0x11,
VK_MENU = 0x12,
VK_PAUSE = 0x13,
VK_CAPITAL = 0x14,
//
VK_KANA = 0x15,
VK_HANGEUL = 0x15, /* old name - should be here for
compatibility */
VK_HANGUL = 0x15,
VK_JUNJA = 0x17,
VK_FINAL = 0x18,
VK_HANJA = 0x19,
VK_KANJI = 0x19,
//
VK_ESCAPE = 0x1B,
//
VK_CONVERT = 0x1C,
VK_NONCONVERT = 0x1D,
VK_ACCEPT = 0x1E,
VK_MODECHANGE = 0x1F,
//
VK_SPACE = 0x20,
VK_PRIOR = 0x21,
VK_NEXT = 0x22,
VK_END = 0x23,
VK_HOME = 0x24,
VK_LEFT = 0x25,
VK_UP = 0x26,
VK_RIGHT = 0x27,
VK_DOWN = 0x28,
VK_SELECT = 0x29,
VK_PRINT = 0x2A,
VK_EXECUTE = 0x2B,
VK_SNAPSHOT = 0x2C,
VK_INSERT = 0x2D,
VK_DELETE = 0x2E,
VK_HELP = 0x2F,
//
VK_LWIN = 0x5B,
VK_RWIN = 0x5C,
VK_APPS = 0x5D,
//
VK_SLEEP = 0x5F,
//
VK_NUMPAD0 = 0x60,
VK_NUMPAD1 = 0x61,
VK_NUMPAD2 = 0x62,
VK_NUMPAD3 = 0x63,
VK_NUMPAD4 = 0x64,
VK_NUMPAD5 = 0x65,
VK_NUMPAD6 = 0x66,
VK_NUMPAD7 = 0x67,
VK_NUMPAD8 = 0x68,
VK_NUMPAD9 = 0x69,
VK_MULTIPLY = 0x6A,
VK_ADD = 0x6B,
VK_SEPARATOR = 0x6C,
VK_SUBTRACT = 0x6D,
VK_DECIMAL = 0x6E,
VK_DIVIDE = 0x6F,
VK_F1 = 0x70,
VK_F2 = 0x71,
VK_F3 = 0x72,
VK_F4 = 0x73,
VK_F5 = 0x74,
VK_F6 = 0x75,
VK_F7 = 0x76,
VK_F8 = 0x77,
VK_F9 = 0x78,
VK_F10 = 0x79,
VK_F11 = 0x7A,
VK_F12 = 0x7B,
VK_F13 = 0x7C,
VK_F14 = 0x7D,
VK_F15 = 0x7E,
VK_F16 = 0x7F,
VK_F17 = 0x80,
VK_F18 = 0x81,
VK_F19 = 0x82,
VK_F20 = 0x83,
VK_F21 = 0x84,
VK_F22 = 0x85,
VK_F23 = 0x86,
VK_F24 = 0x87,
//
VK_NUMLOCK = 0x90,
VK_SCROLL = 0x91,
//
VK_OEM_NEC_EQUA L = 0x92, // '=' key on numpad
//
VK_OEM_FJ_JISHO = 0x92, // 'Dictionary' key
VK_OEM_FJ_MASSH OU = 0x93, // 'Unregister word' key
VK_OEM_FJ_TOURO KU = 0x94, // 'Register word' key
VK_OEM_FJ_LOYA = 0x95, // 'Left OYAYUBI' key
VK_OEM_FJ_ROYA = 0x96, // 'Right OYAYUBI' key
//
VK_LSHIFT = 0xA0,
VK_RSHIFT = 0xA1,
VK_LCONTROL = 0xA2,
VK_RCONTROL = 0xA3,
VK_LMENU = 0xA4,
VK_RMENU = 0xA5,
//
VK_BROWSER_BACK = 0xA6,
VK_BROWSER_FORW ARD = 0xA7,
VK_BROWSER_REFR ESH = 0xA8,
VK_BROWSER_STOP = 0xA9,
VK_BROWSER_SEAR CH = 0xAA,
VK_BROWSER_FAVO RITES = 0xAB,
VK_BROWSER_HOME = 0xAC,
//
VK_VOLUME_MUTE = 0xAD,
VK_VOLUME_DOWN = 0xAE,
VK_VOLUME_UP = 0xAF,
VK_MEDIA_NEXT_T RACK = 0xB0,
VK_MEDIA_PREV_T RACK = 0xB1,
VK_MEDIA_STOP = 0xB2,
VK_MEDIA_PLAY_P AUSE = 0xB3,
VK_LAUNCH_MAIL = 0xB4,
VK_LAUNCH_MEDIA _SELECT = 0xB5,
VK_LAUNCH_APP1 = 0xB6,
VK_LAUNCH_APP2 = 0xB7,
//
VK_OEM_1 = 0xBA, // ';:' for US
VK_OEM_PLUS = 0xBB, // '+' any country
VK_OEM_COMMA = 0xBC, // ',' any country
VK_OEM_MINUS = 0xBD, // '-' any country
VK_OEM_PERIOD = 0xBE, // '.' any country
VK_OEM_2 = 0xBF, // '/?' for US
VK_OEM_3 = 0xC0, // '`~' for US
//
VK_OEM_4 = 0xDB, // '[{' for US
VK_OEM_5 = 0xDC, // '\|' for US
VK_OEM_6 = 0xDD, // ']}' for US
VK_OEM_7 = 0xDE, // ''"' for US
VK_OEM_8 = 0xDF,
//
VK_OEM_AX = 0xE1, // 'AX' key on Japanese AX kbd
VK_OEM_102 = 0xE2, // "<>" or "\|" on RT 102-key kbd.
VK_ICO_HELP = 0xE3, // Help key on ICO
VK_ICO_00 = 0xE4, // 00 key on ICO
//
VK_PROCESSKEY = 0xE5,
//
VK_ICO_CLEAR = 0xE6,
//
VK_PACKET = 0xE7,
//
VK_OEM_RESET = 0xE9,
VK_OEM_JUMP = 0xEA,
VK_OEM_PA1 = 0xEB,
VK_OEM_PA2 = 0xEC,
VK_OEM_PA3 = 0xED,
VK_OEM_WSCTRL = 0xEE,
VK_OEM_CUSEL = 0xEF,
VK_OEM_ATTN = 0xF0,
VK_OEM_FINISH = 0xF1,
VK_OEM_COPY = 0xF2,
VK_OEM_AUTO = 0xF3,
VK_OEM_ENLW = 0xF4,
VK_OEM_BACKTAB = 0xF5,
//
VK_ATTN = 0xF6,
VK_CRSEL = 0xF7,
VK_EXSEL = 0xF8,
VK_EREOF = 0xF9,
VK_PLAY = 0xFA,
VK_ZOOM = 0xFB,
VK_NONAME = 0xFC,
VK_PA1 = 0xFD,
VK_OEM_CLEAR = 0xFE
}
}
}

Steve
"Ignacio Machin ( .NET/ C# MVP )" <ignacio.mach in AT dot.state.fl.us > wrote
in message news:uN******** ******@TK2MSFTN GP10.phx.gbl...
Hi,

You could explore two ways, one is intercepting the KeyDown event and
checkng the KeyEventArg properties for the status of the keys.

Another solution can be in the Click handler to check for the status by
P/invoking GetKeyboardStat e:
[DllImport("user 32.dll")]
public static extern int GetKeyboardStat e(byte [] lpKeyState);

byte[] bCharData = new byte[256];
GetKeyboardStat e(bCharData);

You have to know the index of the keys you want, take a look in the .H
files
--
Ignacio Machin,
ignacio.machin AT dot.state.fl.us
Florida Department Of Transportation

"Steve Barnett" <no****@nodomai n.com> wrote in message
news:%2******** ********@TK2MSF TNGP12.phx.gbl. ..
Is there a .Net equivalent of the GetKeyboardStat e api?

I need to know whether the user is pressing the Ctrl or Shift keys when
they click on my usercontrol.

Thanks
Steve


Mar 30 '06 #5

Maybe you can use : Control.Modifie rKeys ...
Apr 7 '06 #6
I knew there had to be a .Net supplied function for this.

Many thanks
Steve

"Steph." <st***@nomail.c om> wrote in message news:O$******** ******@TK2MSFTN GP04.phx.gbl...

Maybe you can use : Control.Modifie rKeys ...
Apr 7 '06 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

7
8787
by: hokiegal99 | last post by:
I am a relative c newbie, so bare with me. I need to write a program that writes all keyboard keystrokes into a text file (up to 500KB at which point it would begin overwriting itself) regardless of what application the user is inputing data into (email, office documents, etc). The purpose of this program is to have a real time backup of user input so that user input can be restored when a PC crashes or unexpectedly looses power. The...
7
10697
by: Don Riesbeck Jr. | last post by:
I'm working on an application (OEM) using C# that utilizes input from a keyboard, and USB Barcode Scanner. The scanner is a HID Keyboard device, and input from it is sent to the system as if it were a keyboard. I need to be able to identify input from the scanner and keyboard independently. I've looked at DirectX.DirectInput, and using user32.dll to hook into the keyboard messages, but neither method seems to allow for identification of...
5
21124
by: nx-2000 | last post by:
I've got a very large C# forms app and now that its being used in bigger environments we're getting a steady stream of "why does it do this?" problems. The most nagging of which right now is that when a MessageBox.Show() is displayed, if the user hits enter or esc, those keys get passed back to the form. From searching online, this is apparently by design(for whom, I don't know, why its not optional, I _really_ don't know). This...
7
2597
by: tiger786 | last post by:
I am new to programming and studying basics in college .Can somebody write a program on this? The program should monitor a possibly infinite stream of characters from the keyboard (standard input). If it detects the sequence "ccc" it outputs a "0". If it detects the sequence "cdc" it outputs a "1". DO NOT detect sequences within sequences. The program should exit cleanly when it detects an End Of Input. For example:
0
1450
by: Srin | last post by:
Hi, I'm in the process of writing a small C# App, in which i have two groupboxes in a form. The form has the KeyPreview property set to true. The groupbox1 contains a set of labels. The second groupbox contains a few checkboxes and a button. I wrote a form1_keypress handler to handle keyboard inputs directed at the form. But once the groupbox2 receives focus (if i change one of the checkboxes or click on the button), even before i can...
1
5290
by: pinkfloydhomer | last post by:
I am writing a curses application, but the getch() does not seem to give me all I want. Of course, if I press "d", it returns an ord("d") and so on. But I want to be able to detect whether alt, shift or ctrl has been pressed also. Shift is normally covered by returning an uppercase character instead and ctrl seems to return control codes (as is normal, I guess), but alt I can't detect with getch, it seems. Preferably, I would like one...
9
10981
by: Kbalz | last post by:
I have an application that minimizes itself, and I want it to listen for certain key commands, and when they are pressed, my program can react to them. So far I've gotten my application to react as I intend while the program has focus, but when the application loses focus, the listening stops. I am using VS 2008 beta 2, with .net 3.5.
8
5302
by: BD | last post by:
How can I duplicate the behavior of the operating system shortcut keys in my application? For example, my windows form has 5 controls (textboxes), the operating system will pickup which control has the focus and handle ctrl-c, ctrl-v, or any other shortcuts. I have the same shortcuts working in my app, but have not determined how to find out which control has focus. Would I set up a loop or code for each control at form level. Any help...
0
2818
by: Studlyami | last post by:
I have a simple application which includes a default window (named Window1) with no additional xaml. Window1 consists of a timerclass object which contains a timer running at 60hrz. public Window1() {//in Window1.xaml.cs MainTimerClass = new TimerClass(); //my timer class object }
0
9647
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, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
10357
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, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10162
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 tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10101
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
1
7509
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6744
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5528
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
2
3665
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2893
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.