使用SendWait时忽略物理键盘输入

时间:2018-10-16 10:02:56

标签: c# sendkeys virtual-keyboard

使用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

0 个答案:

没有答案