Игнорирование ввода с физической клавиатуры при использовании SendWait - PullRequest
0 голосов
/ 16 октября 2018

Вы когда-нибудь пытались игнорировать специальные физические клавиши клавиатуры при отправке клавиш с помощью SendWait () ?Вы можете легко отключить CAPSLOCK, используя код:

[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

void CheckCapslock()
{
    if(System.Windows.Forms.Control.IsKeyLocked(System.Windows.Forms.Keys.CapsLock)) 
    {
        const int KEYEVENTF_EXTENDEDKEY = 0x1;
        const int KEYEVENTF_KEYUP = 0x2;
        keybd_event(0x14, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
        keybd_event(0x14, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,(UIntPtr)0);
    }
}

И включить его снова ... Большая проблема, когда я пытаюсь удалить ALT, потому что он сразу включается снова.Я также пытался использовать:

[DllImport("user32.dll")]
        public static extern bool SetKeyboardState(byte[] lpKeyState);
...
        SetKeyboardState(new byte[256]);

Чтобы обнулить текущее состояние клавиатуры, но это лотерея - иногда я достаточно быстр, чтобы отправить письмо без каких-либо специальных клавиш, но иногда я нет.

Есть ли способ использовать SendWait () , без каких-либо специальных клавиш с физической клавиатуры?

Я знаю, что есть также SendMessage () функция, которая должна «сырой» ключ, но в моем случае - я не могу ее использовать.

С уважением,

Hawex

...