I
ink
Hi all,
I am working with C# CF2 on windows mobile 5 phone edition on a Symbol MC70
device.
For some reason the KeyDown Event doesn't fire when you use the keybd_event
to send the VK_Return= 0x0D.
If I use the hard keyboard Return I get.
KeyDown
KeyPress
KeyUp
KeyUp
If I use the soft keyboard Return or keybd_event and VK_Return I get.
KeyPress
KeyUp
If I use any of the three above methods (Soft keyboard, Hard keyboard or
keybd_event) to input Numbers, letters or even Delete then I get.
KeyDown
KeyPress
KeyUp
Which is what I would have expected from all of these scenarios.
I have tried setting the Textbox allow returns property and it had no
effect.
I have also tried setting the form key preview property to see if that would
make any difference.
This is the only post I have been able to find that even resembles my
problem, it is for the desktyop and it is the richtextcontrol, but I don't
really understand what the resolution to the problem was.
http://www.thescripts.com/forum/thread249414.html
I really need to be able to send the VK_Return using keybd_event and have it
fire the Key Down event.
Any idea on how this can be done?
I have already tried moving my code that is running in the KeyDown to the
KeyUp but this has not been an acceptable solution to the problem as it
introduces to many bugs.
I have attached the code I have used for testing to the bottom of this post
I create all the controls dynamically so all that you need to do to test is
start a new single form project and past all this code over the top of your
form class code. The way to test is uncomment lines from the
textBox1_GotFocus event.
Thanks in advanced.
ink
//######## START Of Code #####################
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WMTestingApp
{
public partial class Form1 : Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Button button1;
[DllImport("coredll.dll", EntryPoint = "keybd_event", SetLastError =
true)]
internal static extern void keybd_event(byte bVk, byte bScan, int
dwFlags, int dwExtraInfo);
public Form1()
{
InitializeComponent();
this.textBox1 = new System.Windows.Forms.TextBox();
this.listBox1 = new System.Windows.Forms.ListBox();
this.button1 = new System.Windows.Forms.Button();
//
// textBox1
//
this.textBox1.AcceptsReturn = true;
this.textBox1.Location = new System.Drawing.Point(20, 32);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(192, 21);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "textBox1";
this.textBox1.GotFocus += new
System.EventHandler(this.textBox1_GotFocus);
this.textBox1.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.textBox1_KeyUp);
this.textBox1.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
this.textBox1.KeyDown += new
System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
//
// listBox1
//
this.listBox1.Location = new System.Drawing.Point(20, 73);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(192, 72);
this.listBox1.TabIndex = 1;
//
// button1
//
this.button1.Location = new System.Drawing.Point(141, 151);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(71, 23);
this.button1.TabIndex = 2;
this.button1.Text = "clear";
this.button1.Click += new
System.EventHandler(this.button1_Click);
//
// Form1
//
this.Controls.Add(this.button1);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.textBox1);
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
listBox1.Items.Add("textBox1_KeyDown");
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
listBox1.Items.Add("textBox1_KeyPress");
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
listBox1.Items.Add("textBox1_KeyUp");
}
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
}
private void textBox1_GotFocus(object sender, EventArgs e)
{
//PressKey(VirtualKeyCodes.VK_HOME);
//PressKey(VirtualKeyCodes.VK_DELETE);
//PressKey(VirtualKeyCodes.VK_END);
//PressKey(VirtualKeyCodes.VK_SPACE);
//PressKey(VirtualKeyCodes.VK_NUMPAD1);
//PressKey(VirtualKeyCodes.VK_SPACE);
//PressKey(VirtualKeyCodes.VK_NUMPAD2);
//PressKey(VirtualKeyCodes.VK_SPACE);
//PressKey(VirtualKeyCodes.VK_NUMPAD3);
//PressKey(VirtualKeyCodes.VK_RETURN);
}
public void PressKey(VirtualKeyCodes keyCode)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
const int KEYEVENTF_KEYDOWN = 0x0;
byte KeyCode = (byte)keyCode;
keybd_event(KeyCode, 0x45, KEYEVENTF_KEYDOWN |
KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(KeyCode, 0x45, KEYEVENTF_EXTENDEDKEY |
KEYEVENTF_KEYUP, 0);
}
public enum VirtualKeyCodes
{
VK_LBUTTON = 0x01, //Left mouse button
VK_RBUTTON = 0x02, // Right mouse button
VK_CANCEL = 0x03, // Control-break processing
VK_MBUTTON = 0x04, // Middle mouse button on a three-button
mouse
VK_BACK = 0x08, // BACKSPACE key
VK_TAB = 0x09, // TAB key
VK_CLEAR = 0x0C, // CLEAR key
VK_RETURN = 0x0D, // ENTER key
VK_SHIFT = 0x10, // SHIFT key
VK_CONTROL = 0x11, //CTRL key
VK_MENU = 0x12, // ALT key
VK_PAUSE = 0x13, // PAUSE key
VK_CAPITAL = 0x14, // CAPS LOCK key
VK_ESCAPE = 0x1B, //ESC key
VK_SPACE = 0x20, //SPACEBAR
VK_PRIOR = 0x21, //PAGE UP key
VK_NEXT = 0x22, //PAGE DOWN key
VK_END = 0x23, //END key
VK_HOME = 0x24, //HOME key
VK_LEFT = 0x25, // LEFT ARROW key
VK_UP = 0x26, //UP ARROW key
VK_RIGHT = 0x27, //RIGHT ARROW key
VK_DOWN = 0x28, //DOWN ARROW key
VK_SELECT = 0x29, // SELECT key
VK_EXECUTE = 0x2B, //EXECUTE key
VK_SNAPSHOT = 0x2C, //PRINT SCREEN key
VK_INSERT = 0x2D, // INS key
VK_DELETE = 0x2E, //DEL key
VK_HELP = 0x2F, // HELP key
VK_LWIN = 0x5B, //Left Windows key on a Microsoft Natural
Keyboard
VK_RWIN = 0x5C, // Right Windows key on a Microsoft Natural
Keyboard
VK_APPS = 0x5D, // Applications key on a Microsoft Natural
Keyboard
VK_NUMPAD0 = 0x60, // Numeric keypad 0 key
VK_NUMPAD1 = 0x61, // Numeric keypad 1 key
VK_NUMPAD2 = 0x62, // Numeric keypad 2 key
VK_NUMPAD3 = 0x63, // Numeric keypad 3 key
VK_NUMPAD4 = 0x64, // Numeric keypad 4 key
VK_NUMPAD5 = 0x65, // Numeric keypad 5 key
VK_NUMPAD6 = 0x66, // Numeric keypad 6 key
VK_NUMPAD7 = 0x67, // Numeric keypad 7 key
VK_NUMPAD8 = 0x68, // Numeric keypad 8 key
VK_NUMPAD9 = 0x69, // Numeric keypad 9 key
VK_MULTIPLY = 0x6A, // Multiply key
VK_ADD = 0x6B, // Add key
VK_SEPARATOR = 0x6C, // Separator key
VK_SUBTRACT = 0x6D, // Subtract key
VK_DECIMAL = 0x6E, // Decimal key
VK_DIVIDE = 0x6F, //Divide key
VK_F1 = 0x70, // F1 key
VK_F2 = 0x71, // F2 key
VK_F3 = 0x72, // F3 key
VK_F4 = 0x73, // F4 key
VK_F5 = 0x74, // F5 key
VK_F6 = 0x75, // F6 key
VK_F7 = 0x76, // F7 key
VK_F8 = 0x77, // F8 key
VK_F9 = 0x78, // F9 key
VK_F10 = 0x79, // F10 key
VK_F11 = 0x7A, // F11 key
VK_F12 = 0x7B, // F12 key
VK_F13 = 0x7C, // F13 key
VK_F14 = 0x7D, // F14 key
VK_F15 = 0x7E, // F15 key
VK_F16 = 0x7F, // F16 key
VK_F17 = 0x80, // F17 key
VK_F18 = 0x81, // F18 key
VK_F19 = 0x82, // F19 key
VK_F20 = 0x83, // F20 key
VK_F21 = 0x84, // F21 key
VK_F22 = 0x85, // F22 key
VK_F23 = 0x86, // F23 key
VK_F24 = 0x87, // F24 key
VK_NUMLOCK = 0x90, // NUM LOCK key
VK_SCROLL = 0x91, // SCROLL LOCK key
VK_LSHIFT = 0xA0, // Left SHIFT
VK_RSHIFT = 0xA1, // Right SHIFT
VK_LCONTROL = 0xA2, // Left CTRL
VK_RCONTROL = 0xA3, // Right CTRL
VK_LMENU = 0xA4, // Left ALT
VK_RMENU = 0xA5, //Right ALT
VK_ATTN = 0xF6, // ATTN key
VK_CRSEL = 0xF7, // CRSEL key
VK_EXSEL = 0xF8, // EXSEL key
VK_EREOF = 0xF9, // Erase EOF key
VK_PLAY = 0xFA, // PLAY key
VK_ZOOM = 0xFB, // ZOOM key
VK_NONAME = 0xFC, // Reserved for future use
VK_PA1 = 0xFD, // PA1 key
VK_OEM_CLEAR = 0xFE, //CLEAR key
VK_KEYLOCK = 0xF22 //Key used to lock device
}
}
}
//######## END Of Code #####################
I am working with C# CF2 on windows mobile 5 phone edition on a Symbol MC70
device.
For some reason the KeyDown Event doesn't fire when you use the keybd_event
to send the VK_Return= 0x0D.
If I use the hard keyboard Return I get.
KeyDown
KeyPress
KeyUp
KeyUp
If I use the soft keyboard Return or keybd_event and VK_Return I get.
KeyPress
KeyUp
If I use any of the three above methods (Soft keyboard, Hard keyboard or
keybd_event) to input Numbers, letters or even Delete then I get.
KeyDown
KeyPress
KeyUp
Which is what I would have expected from all of these scenarios.
I have tried setting the Textbox allow returns property and it had no
effect.
I have also tried setting the form key preview property to see if that would
make any difference.
This is the only post I have been able to find that even resembles my
problem, it is for the desktyop and it is the richtextcontrol, but I don't
really understand what the resolution to the problem was.
http://www.thescripts.com/forum/thread249414.html
I really need to be able to send the VK_Return using keybd_event and have it
fire the Key Down event.
Any idea on how this can be done?
I have already tried moving my code that is running in the KeyDown to the
KeyUp but this has not been an acceptable solution to the problem as it
introduces to many bugs.
I have attached the code I have used for testing to the bottom of this post
I create all the controls dynamically so all that you need to do to test is
start a new single form project and past all this code over the top of your
form class code. The way to test is uncomment lines from the
textBox1_GotFocus event.
Thanks in advanced.
ink
//######## START Of Code #####################
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WMTestingApp
{
public partial class Form1 : Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Button button1;
[DllImport("coredll.dll", EntryPoint = "keybd_event", SetLastError =
true)]
internal static extern void keybd_event(byte bVk, byte bScan, int
dwFlags, int dwExtraInfo);
public Form1()
{
InitializeComponent();
this.textBox1 = new System.Windows.Forms.TextBox();
this.listBox1 = new System.Windows.Forms.ListBox();
this.button1 = new System.Windows.Forms.Button();
//
// textBox1
//
this.textBox1.AcceptsReturn = true;
this.textBox1.Location = new System.Drawing.Point(20, 32);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(192, 21);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "textBox1";
this.textBox1.GotFocus += new
System.EventHandler(this.textBox1_GotFocus);
this.textBox1.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.textBox1_KeyUp);
this.textBox1.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
this.textBox1.KeyDown += new
System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
//
// listBox1
//
this.listBox1.Location = new System.Drawing.Point(20, 73);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(192, 72);
this.listBox1.TabIndex = 1;
//
// button1
//
this.button1.Location = new System.Drawing.Point(141, 151);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(71, 23);
this.button1.TabIndex = 2;
this.button1.Text = "clear";
this.button1.Click += new
System.EventHandler(this.button1_Click);
//
// Form1
//
this.Controls.Add(this.button1);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.textBox1);
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
listBox1.Items.Add("textBox1_KeyDown");
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
listBox1.Items.Add("textBox1_KeyPress");
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
listBox1.Items.Add("textBox1_KeyUp");
}
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
}
private void textBox1_GotFocus(object sender, EventArgs e)
{
//PressKey(VirtualKeyCodes.VK_HOME);
//PressKey(VirtualKeyCodes.VK_DELETE);
//PressKey(VirtualKeyCodes.VK_END);
//PressKey(VirtualKeyCodes.VK_SPACE);
//PressKey(VirtualKeyCodes.VK_NUMPAD1);
//PressKey(VirtualKeyCodes.VK_SPACE);
//PressKey(VirtualKeyCodes.VK_NUMPAD2);
//PressKey(VirtualKeyCodes.VK_SPACE);
//PressKey(VirtualKeyCodes.VK_NUMPAD3);
//PressKey(VirtualKeyCodes.VK_RETURN);
}
public void PressKey(VirtualKeyCodes keyCode)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
const int KEYEVENTF_KEYDOWN = 0x0;
byte KeyCode = (byte)keyCode;
keybd_event(KeyCode, 0x45, KEYEVENTF_KEYDOWN |
KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(KeyCode, 0x45, KEYEVENTF_EXTENDEDKEY |
KEYEVENTF_KEYUP, 0);
}
public enum VirtualKeyCodes
{
VK_LBUTTON = 0x01, //Left mouse button
VK_RBUTTON = 0x02, // Right mouse button
VK_CANCEL = 0x03, // Control-break processing
VK_MBUTTON = 0x04, // Middle mouse button on a three-button
mouse
VK_BACK = 0x08, // BACKSPACE key
VK_TAB = 0x09, // TAB key
VK_CLEAR = 0x0C, // CLEAR key
VK_RETURN = 0x0D, // ENTER key
VK_SHIFT = 0x10, // SHIFT key
VK_CONTROL = 0x11, //CTRL key
VK_MENU = 0x12, // ALT key
VK_PAUSE = 0x13, // PAUSE key
VK_CAPITAL = 0x14, // CAPS LOCK key
VK_ESCAPE = 0x1B, //ESC key
VK_SPACE = 0x20, //SPACEBAR
VK_PRIOR = 0x21, //PAGE UP key
VK_NEXT = 0x22, //PAGE DOWN key
VK_END = 0x23, //END key
VK_HOME = 0x24, //HOME key
VK_LEFT = 0x25, // LEFT ARROW key
VK_UP = 0x26, //UP ARROW key
VK_RIGHT = 0x27, //RIGHT ARROW key
VK_DOWN = 0x28, //DOWN ARROW key
VK_SELECT = 0x29, // SELECT key
VK_EXECUTE = 0x2B, //EXECUTE key
VK_SNAPSHOT = 0x2C, //PRINT SCREEN key
VK_INSERT = 0x2D, // INS key
VK_DELETE = 0x2E, //DEL key
VK_HELP = 0x2F, // HELP key
VK_LWIN = 0x5B, //Left Windows key on a Microsoft Natural
Keyboard
VK_RWIN = 0x5C, // Right Windows key on a Microsoft Natural
Keyboard
VK_APPS = 0x5D, // Applications key on a Microsoft Natural
Keyboard
VK_NUMPAD0 = 0x60, // Numeric keypad 0 key
VK_NUMPAD1 = 0x61, // Numeric keypad 1 key
VK_NUMPAD2 = 0x62, // Numeric keypad 2 key
VK_NUMPAD3 = 0x63, // Numeric keypad 3 key
VK_NUMPAD4 = 0x64, // Numeric keypad 4 key
VK_NUMPAD5 = 0x65, // Numeric keypad 5 key
VK_NUMPAD6 = 0x66, // Numeric keypad 6 key
VK_NUMPAD7 = 0x67, // Numeric keypad 7 key
VK_NUMPAD8 = 0x68, // Numeric keypad 8 key
VK_NUMPAD9 = 0x69, // Numeric keypad 9 key
VK_MULTIPLY = 0x6A, // Multiply key
VK_ADD = 0x6B, // Add key
VK_SEPARATOR = 0x6C, // Separator key
VK_SUBTRACT = 0x6D, // Subtract key
VK_DECIMAL = 0x6E, // Decimal key
VK_DIVIDE = 0x6F, //Divide key
VK_F1 = 0x70, // F1 key
VK_F2 = 0x71, // F2 key
VK_F3 = 0x72, // F3 key
VK_F4 = 0x73, // F4 key
VK_F5 = 0x74, // F5 key
VK_F6 = 0x75, // F6 key
VK_F7 = 0x76, // F7 key
VK_F8 = 0x77, // F8 key
VK_F9 = 0x78, // F9 key
VK_F10 = 0x79, // F10 key
VK_F11 = 0x7A, // F11 key
VK_F12 = 0x7B, // F12 key
VK_F13 = 0x7C, // F13 key
VK_F14 = 0x7D, // F14 key
VK_F15 = 0x7E, // F15 key
VK_F16 = 0x7F, // F16 key
VK_F17 = 0x80, // F17 key
VK_F18 = 0x81, // F18 key
VK_F19 = 0x82, // F19 key
VK_F20 = 0x83, // F20 key
VK_F21 = 0x84, // F21 key
VK_F22 = 0x85, // F22 key
VK_F23 = 0x86, // F23 key
VK_F24 = 0x87, // F24 key
VK_NUMLOCK = 0x90, // NUM LOCK key
VK_SCROLL = 0x91, // SCROLL LOCK key
VK_LSHIFT = 0xA0, // Left SHIFT
VK_RSHIFT = 0xA1, // Right SHIFT
VK_LCONTROL = 0xA2, // Left CTRL
VK_RCONTROL = 0xA3, // Right CTRL
VK_LMENU = 0xA4, // Left ALT
VK_RMENU = 0xA5, //Right ALT
VK_ATTN = 0xF6, // ATTN key
VK_CRSEL = 0xF7, // CRSEL key
VK_EXSEL = 0xF8, // EXSEL key
VK_EREOF = 0xF9, // Erase EOF key
VK_PLAY = 0xFA, // PLAY key
VK_ZOOM = 0xFB, // ZOOM key
VK_NONAME = 0xFC, // Reserved for future use
VK_PA1 = 0xFD, // PA1 key
VK_OEM_CLEAR = 0xFE, //CLEAR key
VK_KEYLOCK = 0xF22 //Key used to lock device
}
}
}
//######## END Of Code #####################