Как удерживать клавишу Ctrl в коде
Я пишу модульный тест, и определенная функция будет вызываться в глубине стека, если (Control.ModifierKeys == Keys.Control).. Я могу добавить флаг или что-то для конкретного случая выполнения модульного теста, но это было бы слишком грязно! Как я могу установить ModifierKeys для Ctrl через код? Я использую C#.Net 4.0.
2 ответа
Решение
Вы можете использовать P/Invoke для вызова keybd_event
функция для синтеза нажатий клавиш.
Сначала объявите следующее:
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
public const uint KEYEVENTF_KEYUP = 0x02;
public const uint VK_CONTROL = 0x11;
Затем в своем тесте используйте:
// Press the Control key.
keybd_event(VK_CONTROL, 0, 0, 0);
try
{
// Perform test.
}
finally
{
// Release the Control key.
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
Удерживать нажатой: Keyboard.PressModifierKeys(ModifierKeys.Control);
Релиз: Keyboard.ReleaseModifierKeys(ModifierKeys.Control);