none
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

    Annihil8
    Thursday, August 10, 2006 12:15 PM

Answers

  • I've managed to send a key by

    tab

            byte 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

  • Hi,

    not supported in CF - but there is an implementation in the OpenNETCf - www.opennetcf.org 

     

    Pete

    Thursday, August 10, 2006 1:39 PM
  • I've managed to send a key by

    tab

            byte 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

    Annihil8


    Friday, 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.InteropServices

    Sorry about that :)

    Grtz

    Annihil8

    Friday, August 11, 2006 4:30 PM
  •  

    wow it's great!!

     

    It's work on pocket pc(compact framework) too.

     

    Thank you!!

    Tuesday, February 05, 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 Smile

     

    You add the second column to 0x..

    "A" would be 0x41.

     

    Symbolic
    constant name
    Value
    (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,

    Annihil8

     

    Monday, February 25, 2008 9:42 AM
  • Thanks Smile,

     

    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 01, 2010 3:18 PM
  • comma ascii value is 188
    Friday, February 04, 2011 10:47 AM
  • How can we print ş ç ü ö ı ğ Turkish characters
    Wednesday, June 01, 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


    Thursday, March 22, 2012 6:38 AM