Как вызвать событие System KeyDown вручную в .Net Compact framework 3.5 - PullRequest
1 голос
/ 06 апреля 2010

Я разработал пользовательскую клавиатуру с использованием элементов управления resco в моем приложении. В настоящее время я обработал событие нажатия кнопки возврата на клавиатуру со следующим кодом

private void customKeyboard1_KeyboardKeyUp(object sender, Resco.Controls.Keyboard.KeyPressedEventArgs e)
        {
            if (e.Key.Text == "Backspace")
            {
                Resco.Controls.Keyboard.CustomKeyboard.SendBackspace();
                e.Handled = true;
            }
        }

Это прекрасно работает с полями редактирования в приложении, но не работает в полях редактирования на веб-страницах (например, в текстовом поле имени пользователя gmail).

так есть ли способ вызвать событие KeyDown вручную

1 Ответ

1 голос
/ 06 апреля 2010

P / Invoke PostKeybdMessage .

РЕДАКТИРОВАТЬ 1

Что-то в этом роде:

[DllImport("coredll.dll", SetLastError = true)]
internal static extern bool PostKeybdMessage(IntPtr hwnd, uint vKey, 
                                             uint flags, uint cCharacters, 
                                             uint[] pShiftStateBuffer, 
                                             uint[] pCharacterBuffer);

private static void SendChar(byte key)
{
    uint KeyStateDownFlag= 0x0080;    
    uint KeyShiftDeadFlag= 0x20000;    
    uint[] buf1 = new uint[] { (uint)key };    
    uint[] DownStates = new uint[] { KeyStateDownFlag };    
    uint[] DeadStates = { KeyShiftDeadFlag };
    PostKeybdMessage(new IntPtr(-1), 0, KeyStateDownFlag, 1, DownStates, buf1);
    PostKeybdMessage(new IntPtr(-1), 0, KeyShiftDeadFlag, 1, DeadStates, buf1);
}
...