Answered by:
SendKeys in Compact Framework 2.0

Question
-
Hi,
I'm looking for the SendKeys method in CF 2.0.
Is it in the framework and how do you send a tab and shift-tab?
Grtz
Annihil8Thursday, August 10, 2006 12:15 PM
Answers
-
I've managed to send a key by
tabbyte VK_TAB = 0x09;
const int KEYEVENTF_KEYUP = 0x2;
const int KEYEVENTF_KEYDOWN = 0x0;
keybd_event(VK_TAB, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
Shift tab
byte VK_TAB = 0x09;
byte VK_Shift = 0x10;
const int KEYEVENTF_KEYUP = 0x2;
const int KEYEVENTF_KEYDOWN = 0x0;
keybd_event(VK_Shift, 0, KEYEVENTF_KEYDOWN, 0);//press shift
keybd_event(VK_TAB, 0, KEYEVENTF_KEYDOWN, 0);//press tab
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);//release tab
keybd_event(VK_Shift, 0, KEYEVENTF_KEYUP, 0); //release shift
[DllImport("coredll.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
Friday, August 11, 2006 5:14 AM
All replies
-
Thursday, August 10, 2006 1:39 PM
-
I've managed to send a key by
tabbyte VK_TAB = 0x09;
const int KEYEVENTF_KEYUP = 0x2;
const int KEYEVENTF_KEYDOWN = 0x0;
keybd_event(VK_TAB, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
Shift tab
byte VK_TAB = 0x09;
byte VK_Shift = 0x10;
const int KEYEVENTF_KEYUP = 0x2;
const int KEYEVENTF_KEYDOWN = 0x0;
keybd_event(VK_Shift, 0, KEYEVENTF_KEYDOWN, 0);//press shift
keybd_event(VK_TAB, 0, KEYEVENTF_KEYDOWN, 0);//press tab
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);//release tab
keybd_event(VK_Shift, 0, KEYEVENTF_KEYUP, 0); //release shift
[DllImport("coredll.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
Friday, August 11, 2006 5:14 AM -
I heard about that too... if you'd tell me the namespace - that would be nice :)Friday, August 11, 2006 11:58 AM
-
Hi,
I'm not sure why you want a namespace? Do you get an error somewhere?
If you get an error on the keybd_event(...) then you have probably placed the[DllImport("coredll.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
wrong.
It should be placed among the declaration of properties and methods and not in a method or so.
Please, explain it to me and I be glad to help.
Grtz
Annihil8Friday, August 11, 2006 4:13 PM -
I've build a little example to check it and i believe you probably had the upper code allready wright and you probably just need the namespace of the method DLLImport
It is
Using System.Runtime.InteropServicesSorry about that :)
Grtz
Annihil8Friday, August 11, 2006 4:30 PM -
wow it's great!!
It's work on pocket pc(compact framework) too.
Thank you!!
Tuesday, February 5, 2008 7:50 AM -
Can it be done for other keys also, like A, B etc.. If yes from where to get more info.
Thanks.
Monday, February 25, 2008 8:01 AM -
Sure thing
You add the second column to 0x..
"A" would be 0x41.
Symbolic
constant nameValue
(hexadecimal)Keyboard (or mouse) equivalent VK_LBUTTON 01 Left mouse button VK_RBUTTON 02 Right mouse button VK_CANCEL 03 Control-break processing VK_MBUTTON 04 Middle mouse button (three-button mouse) VK_BACK 08 BACKSPACE key VK_TAB 09 TAB key VK_CLEAR 0C CLEAR key VK_RETURN 0D ENTER key VK_SHIFT 10 SHIFT key VK_CONTROL 11 CTRL key VK_MENU 12 ALT key VK_PAUSE 13 PAUSE key VK_CAPITAL 14 CAPS LOCK key VK_ESCAPE 1B ESC key VK_SPACE 20 SPACEBAR VK_PRIOR 21 PAGE UP key VK_NEXT 22 PAGE DOWN key VK_END 23 END key VK_HOME 24 HOME key VK_LEFT 25 LEFT ARROW key VK_UP 26 UP ARROW key VK_RIGHT 27 RIGHT ARROW key VK_DOWN 28 DOWN ARROW key VK_SELECT 29 SELECT key VK_PRINT 2A PRINT key VK_EXECUTE 2B EXECUTE key VK_SNAPSHOT 2C PRINT SCREEN key VK_INSERT 2D INS key VK_DELETE 2E DEL key VK_HELP 2F HELP key 30 0 key 31 1 key 32 2 key 33 3 key 34 4 key 35 5 key 36 6 key 37 7 key 38 8 key 39 9 key 41 A key 42 B key 43 C key 44 D key 45 E key 46 F key 47 G key 48 H key 49 I key 4A J key 4B K key 4C L key 4D M key 4E N key 4F O key 50 P key 51 Q key 52 R key 53 S key 54 T key 55 U key 56 V key 57 W key 58 X key 59 Y key 5A Z key VK_NUMPAD0 60 Numeric keypad 0 key VK_NUMPAD1 61 Numeric keypad 1 key VK_NUMPAD2 62 Numeric keypad 2 key VK_NUMPAD3 63 Numeric keypad 3 key VK_NUMPAD4 64 Numeric keypad 4 key VK_NUMPAD5 65 Numeric keypad 5 key VK_NUMPAD6 66 Numeric keypad 6 key VK_NUMPAD7 67 Numeric keypad 7 key VK_NUMPAD8 68 Numeric keypad 8 key VK_NUMPAD9 69 Numeric keypad 9 key VK_SEPARATOR 6C Separator key VK_SUBTRACT 6D Subtract key VK_DECIMAL 6E Decimal key VK_DIVIDE 6F Divide key VK_F1 70 F1 key VK_F2 71 F2 key VK_F3 72 F3 key VK_F4 73 F4 key VK_F5 74 F5 key VK_F6 75 F6 key VK_F7 76 F7 key VK_F8 77 F8 key VK_F9 78 F9 key VK_F10 79 F10 key VK_F11 7A F11 key VK_F12 7B F12 key VK_F13 7C F13 key VK_F14 7D F14 key VK_F15 7E F15 key VK_F16 7F F16 key VK_F17 80H F17 key VK_F18 81H F18 key VK_F19 82H F19 key VK_F20 83H F20 key VK_F21 84H F21 key VK_F22 85H F22 key VK_F23 86H F23 key VK_F24 87H F24 key VK_NUMLOCK 90 NUM LOCK key VK_SCROLL 91 SCROLL LOCK key VK_LSHIFT A0 Left SHIFT key VK_RSHIFT A1 Right SHIFT key VK_LCONTROL A2 Left CONTROL key VK_RCONTROL A3 Right CONTROL key VK_LMENU A4 Left MENU key VK_RMENU A5 Right MENU key VK_PLAY FA Play key VK_ZOOM FB Zoom key Grtz,
Annihil8Monday, February 25, 2008 9:42 AM -
Thanks
,
How can we print @, _ etc.
Wednesday, February 27, 2008 3:59 PM -
I would imagine you could combine two keystrokes such as shift button and 2 button as follows:
// "Push" the sequence of buttons
keybd_event(VK_SHIFT, 0xAA, 0, 0);
keybd_event(2, 0x83, 0 ,0);
//"release" the buttons
keybd_event(VK_SHIFT,0xAA , KeyUp, 0);
keybd_event(2, 0x83, KeyUp , 0);
or something to that effect.
Wednesday, April 23, 2008 7:28 PM -
To Annihil8,
Hi, I am also looking for Sendkey kind of functionality. Sendkeys work fine for the current postion of the cursor.
That is it would send the text where the cursor position is currently. DO you know/ suggest a way to make SendKey
sending text to particular control in FORM. like Sendkey.Send(TextBox1, "hello")
I would appreciate to hear which can help me in achieving this.
Thank you.
Jussy
Tuesday, August 26, 2008 10:29 PM -
The implementation of SendKeys uses PostKeybdMessage which accepts the handle to the target control. It uses (-1) by default which sends the input to the foreground window. You can easily change it to use the handle of a specific control
Take a look at http://www.egilh.com/blog/archive/2006/04/15/2614.aspx for the SendKeys code
or read http://msdn.microsoft.com/en-us/library/ms911936.aspx about PostKeybdMessage.
Tuesday, October 28, 2008 9:58 AM -
Hi
I tested your code and works great, but I can't find the Comma ,
do you know what is the byte that represents comma?
Friday, October 1, 2010 3:18 PM -
comma ascii value is 188Friday, February 4, 2011 10:47 AM
-
How can we print ş ç ü ö ı ğ Turkish charactersWednesday, June 1, 2011 9:27 AM
-
Hi all,
I have written the code below to make it easier to simulate keyboard functions.
But I have a problem:
using System; using System.Runtime.InteropServices; public class Keyboard { [DllImport("user32.dll", SetLastError = true)] static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); const int KEYEVENTF_KEYUP = 0x2; const int KEYEVENTF_KEYDOWN = 0x0; /// <summary> /// Simulates a keyboard key down. Note that the key will remain pressed until you call Release method. /// </summary> /// <param name="button">the specific key which you want to simulate.</param> public static void Hold(System.Windows.Forms.Keys button) { keybd_event((byte)button, 0, KEYEVENTF_KEYDOWN, 0); } /// <summary> /// Simulates a keyboard key down. Note that the key will remain pressed until you call Release method. /// </summary> /// <param name="button">the byte value of specific key which you want to simulate.</param> public static void Hold(byte button) { keybd_event(button, 0, KEYEVENTF_KEYDOWN, 0); } /// <summary> /// Simulates a keyboard key up. Note that you need to press the key using Hold method, otherwise, this method has no effect. /// </summary> /// <param name="button">the key you have simulated in Hold method.</param> public static void Release(System.Windows.Forms.Keys button) { keybd_event((byte)button, 0, KEYEVENTF_KEYUP, 0); } /// <summary> /// Simulates a keyboard key up. Note that you need to press the key using Hold method, otherwise, this method has no effect. /// </summary> /// <param name="button">the byte value of the key you have simulated in Hold method.</param> public static void Release(byte button) { keybd_event(button, 0, KEYEVENTF_KEYUP, 0); } /// <summary> /// Simulates a keyboard key press. Note that you do not need to release the key after calling this method because it will automatically performs this. /// </summary> /// <param name="button">the key you want to simulate.</param> public static void Simulate(System.Windows.Forms.Keys button) { Hold(button); Release(button); } /// <summary> /// Simulates a keyboard key press. Note that you do not need to release the key after calling this method because it will automatically performs this. /// </summary> /// <param name="button">the byte value of the key you want to simulate.</param> public static void Simulate(byte button) { Hold(button); Release(button); } }
When you call Keyboard.Hold(Keys.Shift); there is no problem and shift is remained pressed but when I call Keyboard.Hold(Keys.A); it only writes one "A" ?!
PK DEVELOPER
- Edited by PK DEVELOPER Thursday, March 22, 2012 6:39 AM
Thursday, March 22, 2012 6:38 AM