Вы когда-нибудь пытались игнорировать специальные физические клавиши клавиатуры при отправке клавиш с помощью 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